JDBC连接数据库
一、连接
a) 载入驱动 第一种方法 Class.forName(com.mysql.jdbc.Driver);(建议) 第二种方法 com.mysql.jdbc.Driver driver=new com.mysql.jdbc.Driver(); DriverManager.rigister(driver);
b) 建立连接 Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306//mysql”,”root”.”123456”)
c) 生成语句对象 Statement st=con.createStatement();
d) 提交SQL语句 executeUpdate() 完成插入,修改insert , excute("sql的create语句或drop语句等"); ResultSet set=stat.excuteQuery("查询语句");//结果集
e) 读取结果集 ResultSet set=stat.excuteQuery("查询语句");//结果集 if(set.next){ set.getString(1); set.getInt(2);};
f) 利用面向对象来改进 set.excuteUpdate(“insert into student(name,sex,birthday) values(‘“+对象.getName()1+”’,’”+对象.getSex()+”’,’”+对象.getBrithday()+”’);”);
g) 解决字符串拼接问题 代码如下
Public viod retrieve(){
PreparedStatement pst=null; //语句对象,实现数据安全。提高服务器性能.利用占位符,然后调用方法给占位符赋值。
ResultSet rs=null;
//载入驱动
Try{
Class.forName(com.mysql.jdbc.Driver);
Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306//mysql”,”root”.”123456”);
Pst=con.prepareStatement(“select * from where name=?”);//预编译的,要带上参数,用?号代替,占位符。
//给?号 占位符 设置值
Pst.setString(int Index,值);//两个参数。第一个是在SQL语句中第几个占位符,后一个参数为值
//提交SQL语句.直接调用executeQuery方法提交,将结果给了ResultSet对象
Rs=Pst.executeQuery();
//读取结果集
Rs.next(); //返回真假。移动结果集的指针。可以用if while来选择使用
If(rs.next()){
Rs.getString(1); 结果集中的第一列
}
}catch(SQLException e){
e.printStackTrace();
}finally{
If(pst!=null){
Pst.close();
}
If(rs!=null){
Rs.close();
}
If(con!=null){
Con.close();
}
}
}
二、 在类外建立包。定义接口并实现。 对应的实现类的操作。
a) 定义接口。 实现此类所用的功能。 每个功能都要定义方法。
b) 定义实现接口类,定义静态变量Connection对象连接数据库. 在静态初始块中给connection对象赋值。
c) 实现每一个方法,利用preparestatement预编译对象来操作数据。
d) 关闭对象的操作。定义方法,在每一个方法执行完在finnally块中关闭。
三、 读取结果集
a) Absolute(int row); 绝对定位指针的位置 定位到第几行
b) First() 定义到第一个数据上面 Last(); 最后
c) Next(); 将指针向下移动 previous() 将指针向前移动
d) afterLast(); 将指针移动到最后一行的后面
e) getXXX(int index);获取第几个位置的数据 getXXX(String ss); ss是指列的名字;
四、 JDBC对LOB的读写
a) BLOB 用于存储大量二进制数据
b) CLOB 用于存储大量文本数据
c) 读取数据,使用输入流
PreparedStatement ps=conn.prepareStatement(“insert into student(name,resume) value(?,?)”);
Int index=1;
Ps.setString(index++,”张三”);
File file=new File(“2.txt”);
FileReader reader=new FileReader(file);
Ps.setCharacterStream(index++,reader,(int )file.length());
If(ps.executeUpdate()>0){
System.out.println(“执行成功”);
}
//读取的操作。使用输出流
If(rs.nett()){
Reader reader=rs.getCharacterStream(2);
Writer writer =new FileWriter(“test.txt”);
Char[] buf=new char[1024];
Int len;
While((len=reader.read(buf))!=-1)
Writer.writer(buf,0,len);
Reader.close();
Writer.close();
}