JDBC基础知识

JDBC基础知识

建立数据库 建立几个表:

使用JDBC连接数据库的步骤

1,导入驱动包

mysql-connector-java-5.1.13.jar

2,加载驱动

Class.forName("com.mysql.jdbc.Driver");

3,通过驱动管理器得到数据库连接对象

得到数据库连接之前,我们需要知道数据库的网络

地址,登陆账号,密码。

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

 String user="root";

 String password="root";

Connection conn=DriverManager.getConnection(url,user,password);

4, 得到数据库连接后就可以发送sql命令进行增删改查的操作,这个时

候需要得到Statement对象来实现这些功能

Statement stmt=conn.createStatement();

5,通过调用Statement的executeUpdate方法来实现增加,删

除,修改的功能,首先我们实现插入功能。

 String sql="insert into

 grade(gradename,createdate,course_teacher,teacher)

values('423脱产班','2013-05-27 21:45:31','afei',‘lsp')";

int count=stmt.executeUpdate(sql);

注意:executeUpdate方法返回受影响行数;

在插入日期数据时,可以传入标准的19位日期字符串;

6,关闭statement(sql执行对象) 和Connection(数据库

连接对象)

 if(stmt!=null){

  stmt.close();

 }

 if(conn!=null){

  conn.close();

 }

删除操作

Stringsql="delete from grade where toid= 19 ";

intcount=stmt.executeUpdate(sql);

修改操作

String sql="update grade set gradename = '0423脱产班' wheretoid='18' ";

stmt.executeUpdate(sql);

查询操作

在得到了Statement对象后,调用其executeQuery方法即可发送查询语句

ResultSet rs=stmt.executeQuery(sql);


此方法会返回结果集对象,它包含了你所查询的所有结果,通过它我们可以得到每条数据

ResultSet对象的next()方法会返回布尔型来表示是否有下一行数据,并且把结果集向前移动一行

while(rs.next()){

int toid=rs.getInt(1);

Stringgradename=rs.getString(2);

System.out.println(toid+""+gradename+" "+createdate+" "+course_teacher+""+teacher);

}

从下标1开始取值,并且你将要取得的数据类型要和

数据表中的数据类型一致,比如第一列数据在数据表中

是int型的,也得用getInt()型来接收。

需要依次关闭ResultSet, Statement, Connection

注意:下标从1开始并且不要越界

ResultSet详细讲解

1,ResultSet是查询后返回的结果集,在ResuultSet内

部有类似指针的结构,在第一次调用next()方法之

前,会把指针指向第一行之前。每次通过循环调用

next()方法,就会把指针往下移动一行。

2,数据表中是什么类型,就用ResultSet的 “get类型”

方法

3,ResultSet对象的"get类型"方法参数可以有两种:

索引和字段名

rs.getString(2)

rs.getString("username")

使用statement增删改查的完整代码

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

importjava.text.SimpleDateFormat;

import java.util.Date;

public classTestMain {

public static void main(String[] args) {

  //delete();

  //update();

  select();

}

public static void insert() {

  try {

   // 加载数据库驱动

  Class.forName("com.mysql.jdbc.Driver");

  } catch (ClassNotFoundException ex) {

// 当驱动包导入失败(或者没导入),就会出现这个异常

  System.out.println("数据库驱动加载失败");

  }

// 连接mysql的语句,加上characterEncoding是为了避免出现乱码

String url ="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";

  String user = "root";

  String password = "root";

  Connection conn = null;

  Statement stmt = null;

  try {

   // 通过驱动管理器得到数据库的连接对象

conn =DriverManager.getConnection(url, user, password);

// 通过连接对象创建statement对象(sql的执行对象)

   stmt = conn.createStatement();

   Date date = new Date();

   // String x="ab'"+date+"' c";

SimpleDateFormatsdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

   String mytime = "2013-05-2815:59:29";

   // Stringmytime=sdf.format(date);

String sql = "insert into grade(gradename,createdate,course_teacher,master_teacher)values('423脱产班','"+ mytime + "','afei','sara') ";

   // 最终执行sql语句的

   stmt.executeUpdate(sql);

  } catch (SQLException ex) {

   ex.printStackTrace();

  } finally {

   try {

     // 关闭执行对象stmt

     if (stmt != null) {

      stmt.close();

     }

     // 关闭数据库连接对象conn

     if (conn != null) {

      conn.close();

     }

   } catch (SQLException e) {

     e.printStackTrace();

   }

  }

}

public static void delete(){

  try {   Class.forName("com.mysql.jdbc.Driver");

  } catch (ClassNotFoundException e) {

  System.out.println("数据库驱动加载失败");

  }

Stringurl="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";

  String user="root";

  String password="root";

  Connection conn=null;

  Statement stmt=null;

  try {

conn=DriverManager.getConnection(url,user,password);

  stmt=conn.createStatement();

stmt.executeUpdate(" delete from gradewhere toid='4' ");

 }catch (SQLException e) {

   // TODO Auto-generated catchblock

   e.printStackTrace();

  }finally{

   try {

     stmt.close();

     conn.close();

   } catch (SQLException e) {

     e.printStackTrace();

   }

  }

}

 public static void update(){

  try {

  Class.forName("com.mysql.jdbc.Driver");

   } catch (ClassNotFoundExceptione) {

throw newRuntimeException("你的驱动包导入错误或者没有导入");

   }

Stringurl="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";

   String user="root";

   Stringpassword="root";

   Connection conn=null;

   Statement stmt=null;

   try {

conn=DriverManager.getConnection(url,user, password);

    stmt=conn.createStatement();

    int count=stmt.executeUpdate(" updategrade set gradename='0423脱产班',course_teacher='amao' wheretoid='5' ");

  System.out.println("受影响行数"+count);

   } catch (SQLException e) {

     e.printStackTrace();

   }finally{

     try{

      if(stmt!=null){

        stmt.close();

      }

      if(conn!=null){

        conn.close();

      }

     }catch(SQLException ex){

      ex.printStackTrace();

     }

   }

 }

 public static void select(){

  try {

  Class.forName("com.mysql.jdbc.Driver");

  } catch (ClassNotFoundException e) {

   e.printStackTrace();

  }

  Connection conn=null;

  Statement stmt=null;

  ResultSet rs=null;

String url="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";

  String user="root";

  String password="root";

  try {

conn=DriverManager.getConnection(url, user,password);

  stmt=conn.createStatement();

  //得到结果集对象,里面包含了所查询的所有数据

  rs=stmt.executeQuery("select * from grade ");

  while(rs.next()){

   int toid=rs.getInt(1);

   Stringgradename=rs.getString(2);

   Date date=rs.getDate(3);

   Stringcourse_teacher=rs.getString(4);

String master_teacher=rs.getString(5);

System.out.println(toid+""+gradename+" "+date+" "+course_teacher+""+master_teacher);

  }  

  } catch (SQLException e) {

   e.printStackTrace();

  }finally{

   try{

     if(rs!=null){

      rs.close();

     }

     if(stmt!=null){

      stmt.close();

     }

     if(conn!=null){

      conn.close();

     }

   }catch(SQLException ex){

     ex.printStackTrace();

   }

}

 }

}

使用PreparedStatement

1, PreparedStatement是Statement接口的子接口,

拥有后者的所有方法;

它们最大的差别 是:PreparedStatement可以使

用占位符的参数,我们在写sql的时候可以把参数

部 分用?表示,然后在后面赋值。

2 ,PreparedStatement会预编译语句,性能较好,

并且可以避免sql注入的问题(Statement不能

避免),通常我们会使用PreparedStatement来

代替Statement。而Statement需要写完整整个

sql语句。

插入操作:

PreparedStatementps= conn.prepareStatement(sql);

ps.setString(1,"423脱产班");

ps.setString(2,"2013-05-2911:17:33");

ps.setString(3,"afei");

ps.setString(4,"sara");

最后一步执行:

ps.executeUpdate()

查询操作:

String sql="select * from grade where course_teacher = ? ";

ps=conn.prepareStatement(sql);

ps.setString(1,"afei");

rs=ps.executeQuery();

使用preparestatement增查完整代码

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.PreparedStatement;

import java.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Timestamp;

importjava.util.Date;

public classTestMain {

 public static void main(String[] args) {

  //insert();

  select();

 }

 public static void insert() {

  try {

    Class.forName("com.mysql.jdbc.Driver");

  } catch (ClassNotFoundException e) {

    e.printStackTrace();

  }

  Connection conn = null;

  PreparedStatement ps = null;

  try {

conn =DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8","root","root");

String sql ="insert into grade(gradename,createdate,course_teacher,master_teacher)values(?,?,?,?) ";

    //创建预处理对象

    ps = conn.prepareStatement(sql);

    //给每个占位符赋值

    ps.setString(1, "1001脱产班");

    Date date = new Date();

//ps.setDate(2, newjava.sql.Date(date.getTime()));

    ps.setString(2,"2013-05-2917:56:39");

    ps.setString(3,"afei");

    ps.setString(4,"saras");

    ps.executeUpdate();

  } catch (SQLException e) {

    e.printStackTrace();

  } finally {

    try{

     if (ps != null) {

       ps.close();

     }

     if (conn != null) {

       conn.close();

     }

    }catch(SQLException ex){

     ex.printStackTrace();

    }

  }

 }

 public static void select(){

  try {

    Class.forName("com.mysql.jdbc.Driver");

  } catch (ClassNotFoundException e) {

    e.printStackTrace();

  }

  Connection conn = null;

  PreparedStatement ps = null;

  ResultSet rs=null;

  try {  conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8","root","root");

Stringsql="select * from grade where course_teacher=? and master_teacher=?";

   ps=conn.prepareStatement(sql);

   ps.setString(1,"afeis");

   ps.setString(2,"1=1");

   rs=ps.executeQuery();

   while(rs.next()){

    int toid=rs.getInt(1);

    String gradename=rs.getString(2);

    Timestamp date=rs.getTimestamp(3);

    String course_teacher=rs.getString(4);

    String master_teacher=rs.getString(5);

System.out.println(toid+""+gradename+" "+date+" "+course_teacher+""+master_teacher);

   }

  } catch (SQLException e) {

    // TODO Auto-generated catchblock

    e.printStackTrace();

  }

 }

}

批处理

有时候我们在实现一个功能时,需要同时执行多条sql语句,这个时候假如每次去单独执行sql语句,就会损耗性能,Statement和PreparedStatement这两个接口就提供了批处理的功能,批处理语句只能是insert,delete,update语句。

Statement的批处理

通过addBatch方法加入一条sql语句

String sql1 =" insert into

grade(gradename,createdate,course_teacher,master_teacher)values('423脱产班',null,'afei','sara') ";

stmt.addBatch(sql1);

String sql2 =" insert into grade(gradename,createdate,course_teacher,master_teacher)values('405脱产班',null,'afei1','sara1') ";

stmt.addBatch(sql2);

String sql3 =" insert into student(stuname,age,telphone,address,gradeid)

values('stu1',18,'13476990909','上海张江','20') ";

stmt.addBatch(sql3);

加完需要执行的sql语句之后,一次性执行

stmt.executeBatch();

PreparedStatement的批处理

String sql = "insert into grade(gradename,createdate,course_teacher,master_teacher)values(?,?,?,?) ";

ps= conn.prepareStatement(sql);

多次加入参数,如下:

加入第一行

ps.setString(1,"423脱产班");

ps.setDate(2,null);

ps.setString(3,"afei");

ps.setString(4,"sara");

ps.addBatch();

statement的批处理

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.SQLException;

importjava.sql.Statement;

public classStatementBatch {

 /**

 *@param args

 */

 public static void main(String[] args) {

  statementBatchTest();

 }

 public static void statementBatchTest() {

  try {

    Class.forName("com.mysql.jdbc.Driver");

  } catch (ClassNotFoundException e) {

    e.printStackTrace();

  }

Stringurl="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";

  String user="root";

  String password="root";

  Connection conn=null;

  Statement stmt=null;

  try {

 conn=DriverManager.getConnection(url,user,password);

   stmt=conn.createStatement();

Stringsql1="insert into student(stuname,age,telphone,address,gradeid)values('afei1','25','19089898989','上海','47')";

   //把第一条语句放入批处理

   stmt.addBatch(sql1);

String sql2="update student set age='100'where gradeid='48' ";

   //把第二条语句放入批处理

   stmt.addBatch(sql2);

   String sql3=" delete from student ";

   //把第二条语句放入批处理

   stmt.addBatch(sql3);

   //最终执行批处理

   int[] counts=stmt.executeBatch();

   for(int i=0;i<counts.length;i++){

System.out.println("第"+(i+1)+"句sql,影响了"+counts[i]+"行");

   }

  } catch (SQLException e) {

    e.printStackTrace();

  }finally{

    try{

     if(stmt!=null){

       stmt.close();

     }

     if(conn!=null){

       conn.close();

     }

    }catch(SQLException ex){

     ex.printStackTrace();

    }

  }

 }

}

preparestatement的批处理

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.PreparedStatement;

importjava.sql.SQLException;

public class PreparedStatementBatch{

 public static void main(String[] args) {

  preparedStatementTest();

 }

 public static voidpreparedStatementTest(){

  try {

    Class.forName("com.mysql.jdbc.Driver");

  } catch (ClassNotFoundException e) {

    e.printStackTrace();

  }

Stringurl="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";

  String user="root";

  String password="root";

  Connection conn=null;

  PreparedStatement ps=null;

  try {

conn=DriverManager.getConnection(url,user, password);

String sql=" insertinto student(stuname,age,telphone,address,gradeid) values(?,?,?,?,?) ";

    ps=conn.prepareStatement(sql);

    //加入第一次参数

    ps.setString(1,"angel1");

    ps.setInt(2,34);

    ps.setString(3,"190876655");

    ps.setString(4,"上海");

    ps.setInt(5,48);

    ps.addBatch();

    //加入第二次参数

    ps.setString(1,"angel2");

    ps.setInt(2,35);

    ps.setString(3,"19087fdfd6655");

    ps.setString(4,"上海2");

    ps.setInt(5,48);

    ps.addBatch();

    //加入第三次参数

    ps.setString(1,"angel4");

    ps.setInt(2,39);

    ps.setString(3,"fdfdfd");

    ps.setString(4,"上海9");

    ps.setInt(5,48);

    ps.addBatch();

    //最终执行批处理语句

    ps.executeBatch();

  } catch (SQLException e) {

    e.printStackTrace();

  }finally{

    try {

     if(ps!=null){

       ps.close();

     }

     if(conn!=null){

       conn.close();

     }

    } catch (SQLException e) {

     e.printStackTrace();

    }

  }

 }

}


你可能感兴趣的:(JDBC基础知识)