JDBC
java DataBase Connectivity
java 数据库连接
由一些接口和类构成的API ,这些接口和类主要在java sql,javax sql包中
JDBC操作数据库
JDBC操作数据库的步骤
加载数据库驱动
建立数据库连接对象
创建执行SQL的语句对象
执行SQL语句
处理结果
释放数据库资源
数据库厂商会实现符合自己数据库特点的数据库驱动程序。
常见数据库产品驱动加载方式
Mysql
Class.forName("com.mysql.jdbc.Driver");
Oracle
Class.forName("oracle.jdbc.driver.OracleDriver");
SQLServer 2008
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
建立数据库连接的方式
Connection conn = DriverManager.getConnection(url,user,password);
String类型的url参数用于指定与哪一台服务器上的哪一个数据库建立连接
URL的格式是:主协议:子协议://主机名:端口号/数据库名
如:jdbc:mysql://localhost:3306/test
String类型的user参数用于指定数据库连接的用户名
String类型的password参数用于指定数据库连接的密码
Statement对象
Statement stmt = conn.createStatement();
PreparedStatement对象
String sql = “select * from students where name = ? and sex = ?”;
PreparedStatement ps = conn.preparedStatement(sql);
ps.setString(1,”张三”);
ps.setString(2,”女”);
Statement类型语句对象的执行
boolean b = stmt.execute(sql);//执行任何sql语句
int I = stmt.executeUpdate(sql);//执行增删改SQL语句
ResultSet rs = stmt.executeQuery(sql);//执行查询语句
PreparedStatement类型语句对象的执行
boolean b = ps.execute();//执行任何类型sql语句
int I = ps.executeUpdate();//执行增删改类型sql语句
ResultSet rs = ps.executeQuery();//执行查询语句
处理执行结果
Statement对象或者PreparedStatement对象调用executeXxx()方法将SQL语句发送到数据库管理系统,数据库管理系统执行完毕之后会有结果返回,不同类型的sql语句以及不同的executeXxx()方法返回的结果都不相同,那么对结果的处理方式也不各不相同。
释放数据库资源
调用.close方法释放资源
释放ResultSet,Statement,Connection
Connection的使用原则是尽量晚创建,尽可能早释放,因为数据库的连接很有限,如果不及时释放将导致系统崩溃
应用对象 4种
强:
就算这个对象用过了,也不会释放 (常用)
软:
在垃圾检测的内存不足的时候会被释放 (不常用)
弱:
在垃圾检测的内存不足的时候不管有没有引用都会被释放 (偶尔)
虚:
检测到就释放掉 (偶尔)
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ChaJDBC
{
// 创建一个加载MySQL的驱动路径
private static String DBNAME = "com.mysql.jdbc.Driver";
// 创建一个数据库的路劲
private static String DBURL = "jdbc:mysql://127.0.0.1:3306/company";
// 数据库的账户名
private static String DBUSER = "root";
// 数据库的密码
private static String DBPASS = "zhang123";
{
try
{ // 用静态代码块加载数据库驱动
Class.forName(DBNAME);
} catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
try
{ // DriverManager 驱动器管理 获取一个执行sql语句的对象Connection
Connection c = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
// 获取一个执行静态sql语句的对象Statement
Statement s = c.createStatement();
//查询语句 返回一个ResultSet 查询结果集
ResultSet r= s.executeQuery("select*from emp;");
//用whlie 循环 导出内容
while (r.next())
{ //取int类型的数据getIn getString取字符串的 getDate取时间的
System.out.println(r.getInt("empno")+
"\t"+
r.getString("ename")+
"\t"
+r.getDate("hiredate"));
}
//first 判断有没有第一句
if(r.first())
{
System.out.println(r.getString("ename"));
}
//关闭集 释放内存
r.close();
//关闭sql执行语句对象 释放内存
s.close();
//关闭 数据库链接 释放内存
c.close();
} catch (SQLException e)
{
e.printStackTrace();
}
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestJDBC
{
//创建一个加载MySQL的驱动路径
private static String DBNAME="com.mysql.jdbc.Driver";
//创建一个数据库的路劲
private static String DBURL="jdbc:mysql://127.0.0.1:3306/test";
//数据库的账户名
private static String DBUSER="root";
//数据库的密码
private static String DBPASS="zhang123";
{
try
{ //用静态代码块加载数据库驱动
Class.forName(DBNAME);
} catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
try
{ //DriverManager 驱动器管理 获取一个执行sql语句的对象Connection
Connection c=DriverManager.getConnection(DBURL, DBUSER, DBPASS);
//获取一个执行静态sql语句的对象Statement
Statement s=c.createStatement();
//执行sql语句
s.execute("create table te(id int primary key auto_increment,tname varchar(10));");
//executeUpdate执行增删改 sql语句
s.executeUpdate("insert into te(tname) values('哈哈');");
s.executeUpdate("insert into te(tname) values('呵呵');");
//修改 字段
s.executeUpdate("alter table te change tname ttname char(6);");
//删除 某个内容
s.executeUpdate("delete from te where ttname='呵呵';");
//修改内容
s.executeUpdate("update te set ttname='hehe' where id=3;");
} catch (SQLException e)
{
e.printStackTrace();
}
}
}