JDBC

相比于Statement,PreparedStatement可以动态改变sql语句的参数,所以应用更灵活。代码和上一篇的差不多,不过这里我特意感受了一下MyEclipse的调试功能,感觉还行。

   improt ……;
public class Test2 {

//连接本地数据库的两种写法
   // private static final String URL="jdbc:sqlserver://localhost:1433;DatabaseName=TestDB";
   // private static final String URL="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=TestDB";
    private static final String URL="jdbc:sqlserver://222.26.*.*:1433;DatabaseName=TestDB";
                                          //连接异地数据库,这里用的是寝室另一台电脑的IP
    private static final String USERNAME="sa";
    private static final String PASSWORD="1234";
    static{
     try {
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载JDBC驱动程序
} catch (ClassNotFoundException e) {
   System.out.println("发生如下异常:");
    e.printStackTrace();
}
    }

public static void main(String[] args) {
       try {
   Connection conn=DriverManager.getConnection(URL, USERNAME,PASSWORD);//建立数据库连接
   PreparedStatement ps=null;
   //insert多条记录*********************************************************************
   Object[][] items={{"Roney2","Tomsy2","1998-02-06",12},{"Kaka","yyu","1998-02-06",12}}; 
   String sql="insert into cchild values(?,?,?,?)";
   ps=conn.prepareStatement(sql);
   ps.clearBatch();
   for(int i=0;i<items.length;i++)
   {
    ps.setString(1, ""+items[i][0]);//从1开始
             ps.setString(2, items[i][1].toString()); 
             ps.setString(3, ""+items[i][2]);
             ps.setInt(4, Integer.parseInt(""+items[i][3]));
             ps.addBatch();
   }
   ps.executeBatch();


   //insert 1个记录*********************************************************************
      ps.clearBatch();//最好先清理一下Batch
      ps.setString(1, "test");
      ps.setString(2, "testson");
      ps.setString(3, "1985-06-04");
      ps.setInt(4, 25);
      ps.execute();//也可以ps.executeUpdate();

        
   //修改一条记录*********************************************************************
   String sql2="update cchild set age=? where birthday=?";
   ps=conn.prepareStatement(sql2);
   ps.setInt(1, 14);
   ps.setString(2, "1998-02-06");
   ps.executeUpdate();
   //修改多条记录*********************************************************************
   Object[][] itemss={{1,"Sun"},{2,"Li"}};
   String sql3="update cchild set age=age+? where cusername=?";
   ps=conn.prepareStatement(sql3);
   ps.clearBatch();
   for(int i=0;i<itemss.length;i++)
   {
      ps.setInt(1, Integer.parseInt(""+itemss[i][0])); 
      ps.setString(2, ""+itemss[i][1]);
      ps.addBatch();
   }
   ps.executeBatch();
   
   
   //删除记录*********************************************************************
   String sql4="delete from cchild where cusername=?";
   ps=conn.prepareStatement(sql4);
   ps.setString(1, "Kaka");
   ps.executeUpdate();
   
   
   //查询记录*********************************************************************
   String sql5="select * from cchild where cusername=?";
   ps=conn.prepareStatement(sql5);
   ps.setString(1, "Zhang");
   ResultSet rs=ps.executeQuery();//注意这里有错

   ResultSetMetaData rsmd=rs.getMetaData();//这里能够得到 返回数据表的详细信息 ,列标号也是从1开始
   System.out.println(rsmd.getColumnName(1)+" "+rsmd.getColumnName(2)+" "+
                rsmd.getColumnName(3)+" "+rsmd.getColumnName(4));//得到各列的列名
   while (rs.next()) {
    String cusername=rs.getString(1);//从1开始的
    String childname=rs.getString(2);
    String birthdaty=rs.getString(3);
    int age=rs.getInt(4);
    System.out.println(cusername+" "+childname+" "+birthdaty+" "+age);
   }
   
   ps.close();//关闭statement
   conn.close();//关闭数据库连接
   System.out.println("success***********");
} catch (SQLException e) {
   System.out.println("产生异常");
     e.printStackTrace();


}
}
    
调试过程:将光标移到想设置断点的某一行,快捷键Ctrl+Shift+B,或者工具栏Run->Toggle BreakPoint,这样就可以为某一行加上断点了,这里我在每一个操作之间都加上了断点。然后再左侧的

Package Explorer中找到那个Test2.java文件,右键Debug As->Java Application, 然后MyEclipse会自动切换到Debug视图,程序会在遇到的第一个断点处停住,此时可以点击上面Resume按钮(快捷键

F8)程序会继续执行到下一个断点处,或者此时按Step Over按钮(快捷键F6),单步执行,不会进入某一个具体函数。如果此时按Step Into( 快捷键F5)则是会进入某一个函数。

按照上面的调试过程,最后这个程序一切正常,哈哈……

JDBC,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。