您的位置:首页 > 数据库 > MySQL

课堂笔记--JDBC

2011-09-14 23:47 197 查看
 
JDBC的使用
创建一个以JDBC连接数据库的程序,包括如下7五个步骤:

第一步:载入驱动

Class.formName("com.mysql.jdbc.Driver");//载入驱动,参数驱动程序的完整路径 ClassNotFoundExcrption

等价:(载入驱动)

Driver d=new Driver();

DriverManager.registerDriver(d);

 

第二步:提供JDBC连接的URL

父协议:自协议://数据库服务地址:端口/数据库名字

String url="jdbc:mysql://localhost:3306/test";

String username="root";

String password="1234";

或urll ="jdbc:mysql://localhost:3306/test?user=root&password=1234”

第三步:建立连接

Connection con;

con=DriverManager.getConnection(url,username,password);

或con=DriverManager.getConnection(urll);

第四步:需要生成一个语句对象(Statement对象),负责向mysql提交sql语句

Statement stat=con.createStatement();

 

第五步:通过语句对象提交sql语句

stat.excuteQuery("sql的查询语句select")

stat.excuteUpdate("sql的更新语句insert/update/delete")

n如果是非0,那就说明更新成功如果n是0,更新操作是失败

 

stat.excute("sql的create语句或drop语句等")

delete from xs where 学号="081102";

 

第六步:处理结果---执行结果可能会出现两种情况

执行更新返回的是本次操作影响到的记录数

执行查询返回的结果是一个ResultSet对象,该对象以0或多条记录的形式包含了查询结果,可以通过隐含的游标(指针)来定位数据,初始化时,游标位于第一条记录前,可以通过next()方法移动到下一条记录。

ResultSet rs=stat.executeQuery(“select …”);

rs.next();//移动游标到第一条记录,如果没有到最后一条记录的后面,方法返回true,否则返回false。

while(rs.next()){

       //读取游标所指的记录行数据

       System.out.println(“学号:”+rs.getInt(1));

       System.out.println(“学号:”+rs.getInt(“id”));

}

ResultSet对象rs中有getXXX()方法,可从当前记录行中获取指定列的信息,可通过指定列索引号或列明两种方式指定要读取的列。

第七步:闭JDBC对象

在操作完成以后要把所使用的JDBC对象全部关闭,以释放JDBC资源,关闭的顺序和声明顺序相反。



finally{

       if(rs!=null){

       try {

              rs.close();

           } catch (SQLException e) {

              e.printStackTrace();

           }

   }…

}

PreparedStatement与 Statement的区别
1: PreparedStatement是预先编译的语句,而Statement则不是预先编译的,在DBMS中处理管理中Statement是要进行语法、语义的,而PreparedStatement则不要。

2: PrepareStatement中执行的SQL语句中是可以带参数的,而Statement则不可以。

比如:

PreparedStatement pstmt  =  con.prepareStatement("UPDATE EMPLOYEES

                                     SET SALARY = ? WHERE ID = ?");

   pstmt.setBigDecimal(1, 153833.00);

  pstmt.setInt(2, 110592);

pstmt. executeUpdate();

3: 当处理批量SQL语句时,这个时候就可以体现PrepareStatement的优势,由于采用Cache机制,则预先编译的语句,就会放在Cache中,下次执行相同SQL语句时,则可以直接从Cache中取出来。

PreparedStatement相对于Statement’而言:安全是一个优势,另一方面是性能。PrepareStatement在重复执行类似的SQL时,速度会快一些,比如不用做SQL解析和重做查询计划等工作。

 

JDBC中大文本及图片的读取:

 

Txt文件的读取:

首先准备一个文本文件,里面的内容可以自行设置,文本文件命名为“text.txt”;再准备一张图片,命名为“bzc.bmp”。将文本文件与图片放置于src目录之下。新建MyBlobTest.java,添加代码:

pstat=con.prepareStatement("insert into stuinfo(name,content,image) values(?,?,?)");

BufferedReader br=null;

InputStream isimg=null;

pstat.setString(1,“test”);//第一个?对应的参数值

br=new BufferedReader(new FileReader(“src/text.txt"));

pstat.setCharacterStream(2,br);

isimg=new FileInputStream("src/DSCF3318.JPG");

pstat.setBinaryStream(3, isimg);

if(pstat.executeUpdate()==1)

           System.out.println("插入成功");

else

           System.out.println("插入失败");

LOB的读取:

新建MyBlobTestSelect.java,添加代码。

pstat=con.prepareStatement("select * from stuinfo where name=?");

ResultSet rs=null;

pstat.setString(1,"test");

rs=pstat.executeQuery();

 while(rs.next()){

       br=new BufferedReader(rs.getCharacterStream(3));

       String str=null;

       while((str=br.readLine())!=null){

              System.out.println(str);

              str=br.readLine();

       }

}

JDBC调用存储过程

 

存储过程调用代码

创建CallableStatement对象

CallableStatement cstat;

cstat=con.prepareCall("{call demoSp(?,?)}");

给存储过程中的参数输入参数值

cstat.setString(1,"HELLO");

cstat.setInt(2,199);

给输出参数指定JDBC类型

cstat.registerOutParameter(2,Types.INTEGER);

执行调用存储过程的语句

boolean hadResults=cstat.execute();

当execute()方法返回为真时,有结果集

读取结果集

while(hadResults){

              ResultSet rs=cstat.getResultSet();

              while(rs.next()){

                     System.out.println(rs.getString(1));

              }

              hadResults=cstat.getMoreResults();

}

读取输出参数的值

int outValue=cstat.getInt(2);

System.out.println(outValue);

 

 

 

                                                                                        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息