JDBC操纵数据库

数据库连接的方式,在之前的博客有记载,就不多说了,主要说说怎么在连接数据库之后,对数据库中的数据进行操作(包括最常见的增删查改)。
JDBC 主要做这样的事,
java程序通过它与数据库连接
将开发者的想要使用的sql语句发送到已连接的数据库
处理sql语句返回的结果

连接数据库,采用驱动连接(以对mysql的操作为例)

        Connection ct;
        PreparedStatement pstmt;
        public Connect(){
            try {
            //加载驱动
                Class.forName("com.mysql.jdbc.Driver");
                //?useUnicode=true&characterEncoding=UTF-8
                //设置数据库编码格式
            //与数据库连接,empsys数据库名称            ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/empsys?useUnicode=true&characterEncoding=UTF-8","root","666666yuan");
                System.out.println("success");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

如果能输出success,则说明连接正确。否则请检查有没有加驱动包,路径有没有问题,等等(别人教你的只有方法,自己的bug还得自己来debug)
注意,这些类和接口都在java.sql包中,其中只有DriverManager是类,Connection是接口,如果想要具体了解,可以自己查看api手册
既然连接上数据库了,我们总得做些什么东西吧
通过执行sql语句来操纵数据库
这里有个点要区别一下,执行sql语句,sql语句分为两种1.静态sql语句2.动态sql语句。
不同的语句执行时采用不同的接口。
执行静态sql语句
主要是通过Statement接口

String sql="delete from cjb where grade<60";
//connection接口有很多常用的方法
//创建并返回一个statement接口
Statement stm=ct.createStatement();
//statement接口执行静态的sql语句
//数据库执行数据更新语句,update,delete,insert语句都是这个方法
stm.executeUpdate(sql);
//立即释放Statement实例占用的数据库和JDBC资源
stm.close();
//关闭数据库连接
ct.close();

静态查询语句使用

Statement stmt=ct.createStatement();
String sql="select * from cjb";
//executeQuery执行查询语句
ResultSet rs=stmt.executeQuery(sql);
System.out.println("snumber cnumber grade");
while(rs.next()){
    String snumber=rs.getString(1);
    String cnumber=rs.getString(2);
    int grade=rs.getInt(3);
    System.out.println(snumber+" "+cnumber+" "+grade);
}

PrepareStatement接口动态执行sql语句

//通过PreparedStatement接口执行动态Insert语句批量记录
String [][] records={ {"081107","101","83"},{"081108","208","86"}};
String sql="insert into CJB(snumber,cnumber,grade) values(?,?,?)";
PreparedStatement prs=conn.prepareStatement(sql);
prs.clearBatch();//清空Batch
for(int i=0;i<records.length;i++){
    prs.setString(1, records[i][0]);
    prs.setString(2, records[i][1]);
    prs.setInt(3, Integer.valueOf(records[i][2]));
    prs.addBatch();//将insert语句添加到Batch中
}
prs.executeBatch();//批量执行Batch中的Insert语句
prs.close();
conn.close();

//通过PrepareStatement实例执行动态SELECT语句查询记录,并输出列名

String sql="select * from CJB where snumber=?";
            PreparedStatement prs=conn.prepareStatement(sql);
            prs.setString(1, "081101");
            ResultSet rs=prs.executeQuery();
            //获得ResultSetMetaData类的实例,然后通过列索引获得指定列的名称并输出
            ResultSetMetaData medata=rs.getMetaData();
            System.out.print(medata.getColumnName(1)+"   ");
            System.out.print(medata.getColumnName(2)+" ");
            System.out.println(medata.getColumnName(3));
            while(rs.next()){//遍历结果集,next()方法可以判断是否存在符合条件的记录
                String snumber=rs.getString(1);//通过列索引来获得指定列的值
                String cnumber=rs.getString(2);
                int grade=rs.getInt(3);
                System.out.println(snumber+"     "+cnumber+"     "+grade);
            }
            rs.close();
            prs.close();
            conn.close();

还有一种就是通过存储过程实现增删查改

String [][] records={{"081107","102","80"},{"081108","206","89"}};
            //调用存储过程
            CallableStatement cablStmt=conn.prepareCall("{call pro_insert1(?,?,?)}");
            cablStmt.clearBatch();
            for(int i=0;i<records.length;i++){
                cablStmt.setString(1, records[i][0]);
                cablStmt.setString(2, records[i][1]);
                cablStmt.setInt(3, Integer.valueOf(records[i][2]));
                cablStmt.addBatch();//将insert语句添加到Batch中
            }
            cablStmt.executeBatch();//批量执行Batch中的Insert语句
            cablStmt.close();
            conn.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值