JDBC基础练习Word格式文档下载.docx
《JDBC基础练习Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《JDBC基础练习Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
右表的数据必须全部显示,用右表去匹配左表的数据,如果左表有符号条件的数据则显示符合条件的数据;
2.5自连接查询
3)存储过程
--创建存储过程语法
delimeter结束符号
createprocedure名称(IN/OUT/INOUT参数名称参数类型)
begin
带逻辑的sql语句
end结束符号
--调用存储过程
CALL存储过程名称(实际参数);
今天的目标:
jdbc基础
2jdbc入门
2.1之前操作数据
1)通过mysql的客户端工具,登录数据库服务器(mysql-uroot-p密码)
2)编写sql语句
3)发送sql语句到数据库服务器执行
2.2什么是jdbc?
使用java代码(程序)发送sql语句的技术,就是jdbc技术!
2.3使用jdbc发送sql前提
登录数据库服务器(连接数据库服务器)
数据库的IP地址
端口
数据库用户名
密码
/**
*jdbc连接数据库
*@authorAPPle
*
*/
publicclassDemo1{
//连接数据库的URL
privateStringurl="
jdbc:
mysql:
//localhost:
3306/day17"
;
//jdbc协议:
数据库子协议:
主机:
端口/连接的数据库//
privateStringuser="
root"
//用户名
privateStringpassword="
//密码
/**
*第一种方法
*@throwsException
@Test
publicvoidtest1()throwsException{
//1.创建驱动程序类对象
Driverdriver=newcom.mysql.jdbc.Driver();
//新版本
//Driverdriver=neworg.gjt.mm.mysql.Driver();
//旧版本
//设置用户名和密码
Propertiesprops=newProperties();
props.setProperty("
user"
user);
password"
password);
//2.连接数据库,返回连接对象
Connectionconn=driver.connect(url,props);
System.out.println(conn);
}
*使用驱动管理器类连接数据库(注册了两次,没必要)
publicvoidtest2()throwsException{
//Driverdriver2=newcom.oracle.jdbc.Driver();
//1.注册驱动程序(可以注册多个驱动程序)
DriverManager.registerDriver(driver);
//DriverManager.registerDriver(driver2);
//2.连接到具体的数据库
Connectionconn=DriverManager.getConnection(url,user,password);
*(推荐使用这种方式连接数据库)
*推荐使用加载驱动程序类来注册驱动程序
publicvoidtest3()throwsException{
//Driverdriver=newcom.mysql.jdbc.Driver();
//通过得到字节码对象的方式加载静态代码块,从而注册驱动程序
Class.forName("
com.mysql.jdbc.Driver"
);
//DriverManager.registerDriver(driver);
}
2.4JDBC接口核心的API
java.sql.*和javax.sql.*
|-Driver接口:
表示java驱动程序接口。
所有的具体的数据库厂商要来实现此接口。
|-connect(url,properties):
连接数据库的方法。
url:
连接数据库的URL
URL语法:
jdbc协议:
//主机:
端口/数据库
user:
数据库的用户名
password:
数据库用户密码
|-DriverManager类:
驱动管理器类,用于管理所有注册的驱动程序
|-registerDriver(driver):
注册驱动类对象
|-ConnectiongetConnection(url,user,password);
获取连接对象
|-Connection接口:
表示java程序和数据库的连接对象。
|-StatementcreateStatement():
创建Statement对象
|-PreparedStatementprepareStatement(Stringsql)创建PreparedStatement对象
|-CallableStatementprepareCall(Stringsql)创建CallableStatement对象
|-Statement接口:
用于执行静态的sql语句
|-intexecuteUpdate(Stringsql):
执行静态的更新sql语句(DDL,DML)
|-ResultSetexecuteQuery(Stringsql):
执行的静态的查询sql语句(DQL)
|-PreparedStatement接口:
用于执行预编译sql语句
|-intexecuteUpdate():
执行预编译的更新sql语句(DDL,DML)
|-ResultSetexecuteQuery():
执行预编译的查询sql语句(DQL)
|-CallableStatement接口:
用于执行存储过程的sql语句(callxxx)
|-ResultSetexecuteQuery():
调用存储过程的方法
|-ResultSet接口:
用于封装查询出来的数据
|-booleannext():
将光标移动到下一行
|-getXX():
获取列的值
3使用Statement执行sql语句
3.1执行DDL语句
*执行DDL语句(创建表)
publicvoidtest1(){
Statementstmt=null;
Connectionconn=null;
try{
//1.驱动注册程序
Class.forName("
//2.获取连接对象
conn=DriverManager.getConnection(url,user,password);
//3.创建Statement
stmt=conn.createStatement();
//4.准备sql
Stringsql="
CREATETABLEstudent(idINTPRIMARYKEYAUTO_INCREMENT,NAMEVARCHAR(20),genderVARCHAR
(2))"
//5.发送sql语句,执行sql语句,得到返回结果
intcount=stmt.executeUpdate(sql);
//6.输出
System.out.println("
影响了"
+count+"
行!
"
}catch(Exceptione){
e.printStackTrace();
thrownewRuntimeException(e);
}finally{
//7.关闭连接(顺序:
后打开的先关闭)
if(stmt!
=null)
try{
stmt.close();
}catch(SQLExceptione){
e.printStackTrace();
thrownewRuntimeException(e);
}
if(conn!
conn.close();
}
3.2执行DML语句
*使用Statement执行DML语句
publicclassDemo2{
*增加
publicvoidtestInsert(){
//通过工具类获取连接对象
conn=JdbcUtil.getConnection();
//3.创建Statement对象
//4.sql语句
INSERTINTOstudent(NAME,gender)VALUES('
李四'
'
女'
)"
//5.执行sql
行"
//关闭资源
/*if(stmt!
}*/
JdbcUtil.close(conn,stmt);
*修改
publicvoidtestUpdate(){
//模拟用户输入
Stringname="
陈六"
intid=3;
/*//1.注册驱动
*/
UPDATEstudentSETNAME='
+name+"
'
WHEREid="
+id+"
System.out.println(sql);
*删除
publicvoidtestDelete(){
DELETEFROMstudentWHEREid="
3.3执行DQL语句
*使用Statement执行DQL语句(查询操作)
publicclassDemo3{
try{
//获取连接
//创建Statement
//准备sql
SELECT*FROMstudent"
//执行sql
ResultSetrs=stmt.executeQuery(sql);
//移动光标
/*booleanflag=rs.next();
flag=rs.next();
if(flag){
//取出列值
//索引
intid=rs.getInt
(1);
Stringname=rs.getString
(2);
Stringgender=rs.getString(3);
System.out.println(id+"
"
+gender);
//列名称
intid=rs.getInt("
id"
Stringname=rs.getString("
name"
Stringgender=rs.getString("
gender"
}*/
//遍历结果
while(rs.next()){
}
}catch(Exceptione){
}finally{
4使用PreparedStatement执行sql语句
publicvoidtestInsert(){
PreparedStatementstmt=null;
//1.获取连接
//2.准备预编译的sql
INSERTINTOstudent(NAME,gender)VALUES(?
?
//?
表示一个参数的占位符
//3.执行预编译sql语句(检查语法)
stmt=conn.prepareStatement(sql);
//4.设置参数值
/**
*参数一:
参数位置从1开始
*/
stmt.setString(1,"
李四"
stmt.setString(2,"
男"