实验名称:数据库访问练习
1、学会PrerparedStatement的使用;
2、学会使用preparedStatement预编译sql语句,并实现数据库的操作;
实验内容:
在MS SQLServer中创建数据库Bookmenagement,在数据库中定义表book
(1) 采用预编译的方法向数据库中插入5本图书;
(2) 实现数据库的CRUD操作。
实验步骤:
数据库操作准备工作:
1、 设置数据库的登录模式,修改登录帐号和密码,启动TCP/IP协议。
(1) 登录:打开SQL Server应用程序,选择服务器名称(这里为xgxy3),身份验证选择Windows身份验证可直接登录
(2) 设置数据库的登录模式:连接到数据库后,在服务名xgxy3上右击à属性à安全性,然后选择服务器登陆模式。
(3) 修改登录帐号和密码:安全性à登录名,可显示所有的用户,在要修改的登录名上右击à选择属性,在弹出的对话框中修改密码。
(4) 断开当前连接,以SQL Server身份再次连接。
(5) 启动TCP/IP协议:开始à程序àMicrosoft SQL Server 2005à配置工具àSQLSever Configuration Manager,选择网络配置àMSSQLSERVER的协议,TCP/IPà右击à启动。
(6) 重启SQLSever服务。
2、在SQL Server数据库中,还原StudentManager,其中包含数据库表student
(1)、点击“数据库”→右键“任务”下的“还原”下的“数据库”;
(2)、在“还原数据库”中的“还原的源”中单机“源设备”选项按钮,并单击右边的[图片上传失败...(image-fb11da-1544800873114)] 按钮。
(3)、在出现的“指定备份”对话框中,单机添加按钮,在出现的定位备份文件对话框中选中备份文件,点击“确定”按钮回到“还原数据库”窗口。
(4)选择用于还原的备份集,点击确定即可。
3、编写sql语句,使用预定义接口preparedstatement对数据库的进行增删改查的预定义操作,然后执行操作即可。
//jdbc.properties配置文件:
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver //在这里我使用的是sql server数据库,可以是任何数据库的驱动
url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=studentmanage //设置JDBC的连接协议和相关地址和接口信息,以及所要连接数据库的名称
user=sa //数据库登陆用户名,可根据实际情况填写
password=111111 //数据登陆时的密码,可由情况具体填写
// experimental contents codes:
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class TestPreparedStatement {
//the method of getting the connection
public static Connection getConnection() {
Connection conn = null;
//get the outside configuration file
InputStream is = ClassLoader.getSystemResourceAsStream("jdbc.properties");
Properties properties = new Properties();
try {
properties.load(is);
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
String userName = properties.getProperty("user");
String password = properties.getProperty("password");
Class.forName(driver);
conn = DriverManager.getConnection(url, userName, password);
} catch (IOException e1) {
e1.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
//the method of executing update operation
public static int exeUpdate(String sql,Object...values) {
Connection conn = null;
conn = TestPreparedStatement.getConnection();
PreparedStatement pstmt = null;
int n = 0;
try {
pstmt = conn.prepareStatement(sql);
for(int i = 1;i <= values.length; i++){
pstmt.setObject(i, values[i-1]);
}
n = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
TestPreparedStatement.release(conn, pstmt, null);
}
return n;
}
//get the method of executing query operation
public static void exeQuery(String sql,int n,Object...values) {//可变参数
Connection conn = null;
conn = TestPreparedStatement.getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
try {//相当于sql语句中?(占位符)的个数,?也就是所指定字段的名称
pstmt = conn.prepareStatement(sql);
for (int i = 1; i <= values.length; i++) {//该循环的作用可以认为是将sql语句将之前空缺的占位符补充完整
pstmt.setObject(i, values[i-1]);
}
//真正的执行sql语句
rs = pstmt.executeQuery();//查询结束后,返回的结果中包含你所需的那几列
String str;
while(rs.next()) {//移动一行
for(int i = 1;i <= n; i++) {//遍历所查询的列
str = rs.getMetaData().getColumnName(i);//获取有关ResultSet对象中列的类型和属性的信息的对象,在这获取列信息
System.out.println(str+":"+rs.getObject(i));//打印输出列
}
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
TestPreparedStatement.release(conn, pstmt, rs);
}
}
//release the connection of datebase operation
public static void release(Connection conn, PreparedStatement pstmt,ResultSet rs) {
if(rs != null)
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(pstmt != null)
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//drive codes
public static void main(String[] args) {
String sql = "insert into book values(?,?,?,?,?,?)";
// int n = TestPreparedStatement.exeUpdate(sql, "20180618001","little prince","清华大学出版社","梁胜斌","2018/11/22",59.80);
// int n = TestPreparedStatement.exeUpdate(sql, "20180618002","little little","清华大学出版社","梁拜斌","2018/11/12",59.00);
// int n = TestPreparedStatement.exeUpdate(sql, "20180618003","little lit","清华大学出版社","梁斌","2018/10/12",49.00);
// int n = TestPreparedStatement.exeUpdate(sql, "20180618004","little l","清华大学出版社","梁斌1","2018/9/12",48.00);
int n = TestPreparedStatement.exeUpdate(sql, "20180618005","little","清华大学出版社","梁","2018/8/12",99.00);
if(n > 0){
System.out.println("添加"+n+"本图书成功!!!");
}else{
System.out.println("添加图书失败!!!");
}
String sql1 = "select bno,bname,bprice from book where bno=?";
TestPreparedStatement.exeQuery(sql1, 3,"20180618003");
}
}
网友评论