您的位置:首页 > 编程语言 > Java开发

Java基础 JDBC操作数据库

2017-12-13 08:22 363 查看
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");

建立数据库连接的方式
C
c5be
onnection 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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: