JDBC教程

来源:互联网 发布:韩国网络作家 编辑:程序博客网 时间:2024/06/05 23:06

3. SQL语句分类

数据定义语言(DDL)

数据定义语言(DDL)用于定义、修改或者删除数据库对象,如Create Table等

数据查询语言(DQL)

数据查询语句(Data Query Language,DQL)用于对数据进行检索。如最常用的Select语句

数据操纵语言(DML)

数据操纵语言(DML)用于访问、建立或者操纵在数据库中已经存在数据,如Select、Insert、Update和Delete等等。

事务控制语言(TCL)

事务控制语言(Transact Control Language)管理DML语句所做的修改,是否保存修改或者放弃修改。如:Commit、Rollback、Savepoint、Set Transaction等命令。

数据控制语言(DCL)

数据控制语言(DCL)管理对数据库内对象的访问权限和授予和回收,如Grant、Revoke等等。

4. 基本SQL语句

基本的SQL语句包括DQL和DML。也就是对数据库最常用的四大基本操作:查询(Select)、插入(Insert)、更新(Update)和删除(Delete)


查询语句例

SELECT 字段名 FROM 数据表 WHERE 筛选条件

SELECT * FROM grade WHERE 数学=80 or 语文=90

SELECT * from userTable where user_age in {20,22,25}

SELECT * from userTable where user_name like ‘王%’

SELECT * from userTable where user_name is null

DML的基本格式

(1)DELETE指令:删除数据记录。

–基本语法:DELETE FROM 数据表WHERE 条件
–例:DELETE from grade WHERE 数学=0

功能说明:删除所有数学成绩为零的记录,如果没有WHERE子句,则删除所有
记录。

(2)UPDATE指令:更新数据记录。

–基本语法:UPDATE 数据表SET 字段值=新值WHERE条件
–例1:UPDATE grade SET 数学=数学+10 说明:将grade表中所有人的
成绩加10分
–例2:UPDATE grade SET 数学=100 WHERE 姓名like '%敏%'

功能说明:将姓名中含有敏的人的数学成绩更新为100分

(3)INSERT INTO指令

功能说明:该语句等价于:

INSERT INTO grade(学号, 姓名, 语文, 数学, 英语) VALUES (5678, '周润发',70,80,90)

(3)INSERT INTO指令:添加数据记录。

–基本格式1:INSERT INTO 数据表VALUES (字段新值)
–基本格式2:INSERT INTO 数据表(字段一,字段二,……)VALUES
(字段新值)

其中关键字两种格式的区别是:当values含有数据库表所有字段的值,并且顺序和数据库字段一致时,就可以省略数据库表后面的字段名称。

–例1:INSERT INTO grade(学号, 姓名, 数学) VALUES (1234, '周润发',70)
–例2:INSERT INTO grade VALUES (5678, '周润发',70,80,90)

5. 加载驱动程序

连接数据库前先要加载驱动程序

import java.sql.*
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Class.forName(“jdbc.driver_class_name”);

Drivers:

com.microsoft.jdbc.sqlserver.SQLServerDriver
org.gjt.mm.mysql.Driver
Oracle.jdbc.driver.OracleDriver


6. Connection对象

public staticConnection getConnection(String url, String user, String
password) throws SQLException

建立是建立与数据库之间的连接,也就是创建一个Connection的实例。DriverManager类的 getConnection()方法将建立数据库的连接:

在程序的最后,应该关闭Connection对象:

public void close() throws SQLException

SQL Server下的URL:

jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=xx

Connection接口的方法

public StatementcreateStatement() throws SQLException

public void commit() throws SQLException

public boolean getAutoCommit() throws SQLException

public CallableStatementprepareCall(Stringsql) throws SQLException


7. Statement对象

Statement对象用于将SQL语句发送到数据库中。

存在3种Statement对象:

(1)Statement;

(2)PreparedStatement(从Statement继承而来);

(3)CallableStatement(从PreparedStatement继承而来)。


Statement接口

Statement接口提供了两种执行SQL语句的常用方法:

public ResultSet executeQuery(String sql) throws SQLException

用于产生单个ResultSet的语句,例如SELECT语句。

public int executeUpdate(String sql) throws SQLException

用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,例如CREATE TABLE和DROP TABLE。该方法返回一个整数,指示受影响的行数。

8. ResultSet对象

ResultSet包含符合SQL语句执行结果所有行,并且它通过一套get方法提供了对这些
行中数据的访问,常用的get方法有:

int getInt(int columnIndex),取得当前行中第columnIndex列的整数的值。int getInt(String columnName),取得当前行中列名为columnName的整数的值。

其他方法:

getDate(int columnIndex) getDate(String columnName)

getString(int columnIndex) ,getString(String columnName)

ResultSet维护指向其当前数据行的光标,让光标向下移动一行的方法是:

public boolean next() throws SQLException

利用While循环获取数据表中所有记录

利用ResultSet对象在建立时,记录指针指向第一条记录之前,结合ResultSet对象提供的next方法,在while循环中移动记录指针,向下逐条地将数据库中的记录依次获取,在移动到记录的最后一条,由next方法返回值false来结束循环。

语法结构:

while(rs.next())

{

rs.getXXX(“字段名称”);

……

}

9. 总结:JDBC访问数据库基本方法

数据访问基本格式

Class.forName("JDBC驱动程序");

Connection conn=DriverManager.getConnection("相应JDBC驱动程序
的连接串);

Statement stmt=conn.createStatement();

ResultSet rs=stmt.executeQuery("DQL语句");//如果是数据查询

stmt.executeUpdate("DML语句");//如果是数据操作


 JDBC方式

以下是SQL Server的连接方式,需要先安装驱动程序,见图7-5


图7-5 SQL Server驱动程序

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

con=DriverManager.getConnection("jdbc:microsoft:sqlserver:

//localhost:1433;DatabaseName=testDatabse","sa","");

Mysql数据库访问

Class.forName("org.gjt.mm.mysql.Driver");

con=DriverManager.getConnection

("jdbc:mysql://localhost:3306/testDatabse","root","");

也需要安装驱动程序文件

3. 移动查询

移动查询就是指要在记录集中上下移动指针或定位到指定的行。见源代码 selectUserTable3.jsp

sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

rs.absolute(2);

rs.getString("add_time")

rs.afterLast();

while(rs.previous()){

rs.getInt("user_age")

}

4. 参数查询

指由客户提交查询条件,例子见selectUserTable4.jsp

String sex=codeToString(request.getParameter("sex"));

if(sex==null||sex.trim().length()==0)

sqlString=new String("SELECT * FROM userTable");

else

sqlString=new String("SELECT * FROM userTable where
user_sex='"+sex.trim()+"'");

rs.last();

int rowNumber=rs.getRow();

out.print("<Table Border>");

out.print("<form action=selectUserTable4.jsp method=post>");

rs.beforeFirst();

5. 模糊查询

selectUserTable5.jsp例子实现了用户姓名的模糊查询

sqlString=new String("SELECT * FROM userTable where
user_true_name like '%"+username.trim()+"%'");


7.4 追加记录  

追加就是在数据库最后加上记录,示例见insertUserTable.jsp

if (form1.password.value != form1.repassword.value){

alert("密码与确认密码不同");

form1.password.focus();

return false;

}

表单验证

if (form1.username.value == ""){

alert("用户名不能为空,请输入用户名!");

form1.username.focus();

return false;

}

追加记录acceptInsertUserTable.jsp

String age=codeToString(request.getParameter("age"));

int ageint;

try

{

ageint=Integer.parseInt(age.trim());

}

catch(Exception e)

{

ageint=0; //没有输入年龄或输入的年龄不是数字则值为0

}

插入数据库

String username=codeToString(request.getParameter("username"));

if(username==null)//无内容则设为空串

username="";

追加记录

sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

sql.executeUpdate(sqlString);

插入数据库

sqlString="insert into
userTable(user_name, user_password, user_true_name, user_age, user_sex, user_address, user_telephone)"+"
values('"+username+"','"+password+"','"+usertruename+"', "+ageint+ ",'"+sex+"','"+address+"','"+telephone+"')";


 

7.5 删除记录

该例子在上例中删除记录的操作

long user_id;

try

{

user_id=Long.parseLong(request.getParameter("user_id"));

}

catch(Exception e)

{

user_id=0;

}

数据页面deleteUser1.jsp

out.print("<TD > <a href='deleteUser2.jsp?user_id ="+rs.getLong(1)+"'>×</a> </TD>");

删除程序deleteUser2.jsp

删除记录

if(user_id!=0)//接收到的参数正确

{

sqlString="delete from userTable where user_id="+user_id;

sql.executeUpdate(sqlString);

out.print ("<TD ><a href ='updateUser2.jsp?user_id="+ rs.getLong (1)+"'> 修改资料 </a> </TD>");

7.6 更新记录

修改资料显示页面updateUser1.jsp

out.print("<TD ><a href='updateUser2.jsp?user_id="+rs.getLong(1)+"'>修改资料</a></TD>");

编辑用户资料页面updateUser2.jsp

user_id=Long.parseLong(request.getParameter("user_id"));

String sqlString="select * from userTable where user_id="+user_id;

<form action="updateUser3.jsp" method="post" onsubmit= "return on_submit()" name="form1">

<td width="75%"><input type="text" name="username" value= "<%=rs.getString("user_name")%>"></td>

String username=codeToString (request.getParameter("username"));

if(username==null)//无内容则设为空串

username="";

资料修改页面updateUser3.jsp

sqlString="update userTable set user_name='"+username+"',user_true_name='"+usertruename+"',user_age="+ ageint+",user_sex='“+sex+"',user_address='"+address+"', user_telephone='"+telephone+ "‘where user_id="+user_id;

sql.executeUpdate(sqlString);

 

7.7 在ResultSet中修改数据

1. 在ResultSet中追加记录

insertUserTable.jsp 不变,修改四个部分

sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

rs=sql.executeQuery(sqlString);
rs.moveToInsertRow();
acceptInsertUserTable.jsp:

rs.updateString("user_name",username);

rs.insertRow();

sqlString="select * from userTable";

2. 在ResultSet中更新记录

updateUser1.jspupdateUser2.jsp不变(updateUser3.jsp)

更新sql语句变查询

sqlString="select * from userTable where user_id="+user_id;

sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

rs.updateRow();

本章介绍了数据库连接的原理,示例了怎样连接数据块,以及理解SQL并对数据库进行查询,删除,添加,修改等基本操作,同时介绍了用ResultSet进行基本数据库编程的方法
 
原创粉丝点击