数据库SQL Server2012笔记(八)——Statement与PreparedStatement的区别,JDBC方式操作数据库

1、Statement与PreparedStatement的区别
1)都可用于  把sql语句从java程序中发送到制定数据库,并执行sql语句。
2)区别
  • 直接使用Statement,驱动程序一般不会对sql语句做处理,而直接交给数据库。
  • 使用PreparedStatement,形成预编译的过程,并且会对语句做字符集的转换(至少在sql  server中如此)。好处:对于多次重复执行的语句,PreparedStatement效率更高,适合批量(batch),且解决系统的本地化问题。
  • PreparedStatement可有效防止危险字符的注入,即sql注入问题。但要求用“?”赋值方式才可以。"?"可解决注入漏洞问题
    • ps=ct.PreparedStatement("select  *  from  dept  where  deptno=?  and  loc=?");
    • ps.setInt(1,20);
    • ps.setString(2,"dallas");

2、JDBC方式操作数据
1)定义对象
  • PreparedStatement  ps=null;
  • Connection  ct=null;
  • ResultSet  rs=null;
2)初始化
  • 加载驱动
    • Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
  • 得到连接
    • ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;database=数据库名","用户名","密码")
    • 127.0.0.1表示要连接的数据库的IP,此处表示本地
    • 1433表示sqlserver的默认端口(一共65535个端口)
    • oracle:1521,mysql:3306
  • 创建火箭车
    • ps=ct.PreparedStatement("Select  *  from  emp");
  • 执行
    • rs=ps.executeQuery();
    • rs=ps.executeUpdate();
  • 循环读取
    • while(rs.next()){  }
    • rs指向结果集的第一条的前一条,一定要rs.next()一下。
    • 如果取值按编号取,则需要一一对应。
    • 如果取值按猎命去,则顺序灵活。

3、作业相关问题
1)job<>'manager':不等于
2)oracle中有一个可以获得每个月的最后一天的方法
3)sql  server:DATEDIFF(datapart,startpart,endpart)
4)upper len substring
     以首字母大写的方式显示员工姓名
     select  upper(substring(ename,1,1))+lower(substring(ename,2,len(ename)))  from  emp
5)len(字段名):字段长度
6)显示所有员工姓名的前三个字符
     select  substring(ename,1,3)  from  emp
7)replace(字段,‘被替代’,‘替换’)
8)datepart(年/月/日...,字段名)
posted @ 2017-04-22 22:14  一天从晚上开始  阅读(454)  评论(0编辑  收藏  举报