JDBC初步
public static void main(String[] args){
Class.forName("com.mysql.jdbc.Driver"); //加载驱动
//数据库:格式:jdbc:mysql(sqlserver): //数据库服务器地址:端口(3306为mysql端口,sqlserver 2005为1433);数据库名称
String url = "jdbc:mysql://localhost:3306/db_localTest?useUnicode=true&characterEncoding=gbk;";
String userName = "root";
String userPwd = "root";
Connection con = DriverManager.getConnection(url,userName,userPwd); //获取connection实例
String strsql = "Insert into tb_User() values('','','')"; //sql
Statement stmt = con.CreateStatement(); //获取Statement实例
stmt.excuteUpdate(strsql); //执行sql语句
con.close();
}
}
Class.forName("驱动路径") //在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),成功加载后,会将Driver类的实例注册到DriverManager类中。
备注:DriverManager 类中方法都是静态方法,直接调用
1、getConnection(String url,String user,String password) 获取connection实例
备注:关于URL标示[书写形式:协议:子协议:数据源标识]
- 协议:在JDBC中总是以jdbc开始
- 子协议:是桥连接的驱动程序或是数据库管理系统名称,如mysql或者sqlserver等
- 数据源标识:标记找到数据库来源的地址与连接端口
2、setLoginTimeout() //获取驱动程序试图登陆到某一数据库可以等待的最长时间,秒为单位
3、println(String message) //将一条消息打印到当前JDBC日志流中
Connection接口:表示与特地数据库连接。要对数据库中对象操作,首先需要获取数据库连接。
Connection 实例就像是在应用程序与数据库之间开通了一条渠道。
Statement接口:用于创建向数据库中传递SQL语句的对象,该接口提供了一些方法可以实现对数据库的常用操作。
Statement分为3中:
【1】静态执行SQL语句 ,通过Statement实现;
【2】执行动态SQL语句,通常通过PreparedStatement实例实现,一般采用这种,预编译方式;可以防止SQL注入。
【3】执行数据库存储过程,通常通过CallableStatement实例实现。
PreparedStatement接口:继承与Statement,用于动态的执行SQL语句,通过PreparedStatement执行的SQL语句,将被预编译保存到PreparedStatement实例中,从而可以反复SQL语句。
执行SQL语句:
Statement接口提供了3种执行SQL语句的方法:executeQuery(), executeUpdate() ,execute()
- 【1】ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句 ,返回一个结果集(ResultSet)对象。
- 【2】int executeUpdate(String sqlString):用于执行INSERT、UPDATE或 DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
- 【3】execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
ResultSet接口:
类似于临时表(TempTable),暂时存储数据库查询操作说获取的结果集。
通过ResultSet获取数据的形式主要是:
{
String Name = rs.getString("name");
String Pwd = rs.getString(2);
}
【列的索引是从左往右编号的,并且从1开始】
加载数据库驱动:Class.forName(String driverName) ;
DriverManager.getConnection() 获取连接对象
返回值:返回与带有给定字符串名的类或者接口相关联的Class对象。
forName() 方法参数指定要加载的数据库驱动,加载成功,会将加载的驱动注册给DriverManager,如果失败,会抛出ClassNotFoundException异常。
关闭JDBC对象
1、操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
- 【1】关闭记录集
- 【2】关闭声明
- 【3】关闭连接对象
1 if(rs != null){ // 关闭记录集statement
3 rs.close() ;
4 }catch(SQLException e){
5 e.printStackTrace() ;
6 }
7 }
8 if(stmt != null){ // 关闭声明
9 try{
10 stmt.close() ;
11 }catch(SQLException e){
12 e.printStackTrace() ;
13 }
14 }
15 if(conn != null){ // 关闭连接connection对象
16 try{
17 conn.close() ;
18 }catch(SQLException e){
19 e.printStackTrace() ;
20 }
21 }
加载Mysql数据库驱动:
1 try{ 2 Class.forName("com.mysql.jdbc.Driver"); 3 }catch(Exception e){ 4 e.printStackTrace(); 5 }
使用PreparedStatement接口中的excuteUpdate()向Mysql中添加数据
Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/db_database"; String userName = "root"; String userPwd = "root"; Connection mycon = DriverManager.getConnection(url,userName,userPwd); String sql = "Insert into tb_User(username,userPwd,sex,age) values(?,?,?,?)"; PreparedStatement ps = con.PreparedStatement(sql); ps.setString(1,"李四"); //给占位符?赋值 从1开始 ps.setString(2,"aaa"); ps.setString(3,"男"); ps.setInt(4,23); ps.excuteUpdate(); con.close()
获得查询结果集:
1 Class.forName("com.mysql.jdbc.Driver"); 2 String url = "jdbc:mysql://localhost:3306/db_database"; 3 String userName = "root"; 4 String userPwd = "root"; 5 6 Connection con = DriverManager.getConnection(url,userName,userPwd); 7 Statement stmt = con.CreateStatement(); 8 String sql = "Select * from tb_User"; 9 ResultSet rs = stmt.exuteQuery(sql); 10 int id,age; 11 String username,userPwd,sex; 12 System.out.println("id\t 用户名\t 性别\t 年龄"); 13 while(rs.next()){ 14 id = rs.getInt("id"); 15 username = rs.getString(2); 16 . 17 . 18 . 19 }
更改数据库中数据:
1 public static void main(String[] args){ 2 try{ 3 Class.forName("com.mysql.jdbc.Driver"); 4 }catch(Exception e){ 5 e.printStackTrace(); 6 } 7 String url = "jdbc:mysql://localhost:3306/db_database"; 8 String userName = "root"; 9 String userPwd = "root"; 10 String sql = "update tb_users set age = 20 where id = 1"; 11 Connection con = DriverManager.getConnection(url,userName,userPwd); 12 Statement stmt = con.CreateStatement(); 13 stmt.executeUpdate(sql); 14 System.out.println("修改成功!"); 15 con.close(); 16 }
使用PreparedStatement 接口中的excuteUpdate方法修改数据库中tb_User
public static void main(String[] args){ try{ Class.forName("com.mysql.jdbc.Driver"); }catch(Exception e){ e.printStackTrace(); } String url = "jdbc:mysql://localhost:3306/db_database"; String userName = "root"; String userPwd = "root"; String sql = "update tb_User set username=? where sex = ?"; Connection con = DriverManager.getConnection(url,userName,userPwd); PreparedStatement ps = con.PreparedStatement(sql); ps.setString(1,"admin"); ps.setString(2,"女"); int count = ps.executeUpdate(); System.out.println("修改成功!"); con.close(); }
模糊查询:
1 //模糊查询 2 public class Test02{ 3 public static void main(String[] args){ 4 Class.forName("driverName"); 5 String url = "jdbc:mysql://localhost:3306;DatabaseName=tb_User"; 6 String username = "root"; 7 String userPwd = "root"; 8 Connection con = DriverManager.getConnection(url,username,userPwd); 9 Statement stmt = con.CreateStatement(); 10 String sql = "Select * from tb_User where username like '%李%'"; 11 ResultSet rs = stmt.excuteQuery(sql); 12 int id,age; 13 String userName,userPwd;sex; 14 System.out.println("编号\t 用户名\t 性别\t 年龄"); 15 while(rs.next()) 16 { 17 id = rs.getInt("id"); 18 userName = rs.getString(2); 19 userPwd = rs.getString("password"); 20 sex = rs.getString(4); 21 age = rs.getInt("age"); 22 System.out.println(id+"\t"+userName+"\t"+sex+"\t"+age); 23 } 24 } 25 }
JDBC调用存储过程(有输入参数IN没有输出参数OUT):
1 public class TestProcedure01{ 2 public static void main(STrng[] args){ 3 System.out.println("------------调用无参数的存储过程------"); 4 Connection con = null; 5 CallableStatement callstmt = null; 6 try 7 { 8 Class.forName(ProcessProc.DB_Driver); 9 con = DriverManager.getConnection(DB_Url,DB_Name,DB_Pwd); 10 callstmt = con.prepareCall("{call TEST_MICHAEL_NOOUT(?,?,?,?)}"); 11 12 callstmt.setString(1,"jdbc"); 13 callstmt.setString(2,"JDBC"); 14 callstmt.setDouble(3,8000.00); 15 callstmt.setString(4,"http://sjsky.iteye.com"); 16 callstmt.exceute(); 17 System.out.println("-----End------"); 18 } 19 catch(Exception e) 20 { 21 e.printStackTrace(System.out); 22 }finally{ 23 if (callstmt!=null) { 24 callstmt.close(); 25 } 26 if (con!=null) { 27 con.close(); 28 } 29 } 30 } 31 } 34 static class ProcessProc{ 35 private final static String DB_Driver = "mysql.jdbc.driver"; 36 private final static String DB_Url = "jdbc:mysql://localhost:3306;Db_User"; 37 private final static String DB_Name = "root"; 38 private final static STring DB_Pwd = "root"; 39 }
JDBC批处理http://www.cnblogs.com/QQ931697811/p/5044725.html