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语句");//如果是数据操作
7.4 追加记录
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()+"%'");
追加就是在数据库最后加上记录,示例见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>");
修改资料显示页面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" οnsubmit= "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);
本章介绍了数据库连接的原理,示例了怎样连接数据块,以及理解SQL并对数据库进行查询,删除,添加,修改等基本操作,同时介绍了用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();
JDBC教程
最新推荐文章于 2022-05-12 18:47:38 发布