马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 可爱的静静 于 2017-9-1 00:05 编辑
java操作数据库的几个步骤:
1、注册驱动:
Class.forName("驱动程序类名加上包名");
2、建立与数据库的连接,获得Connection对象,其格式:
Connection 对象名=DriverManager.getConnection("url","用户名","密码")
连接SQL Server的url格式:
jdbc:sqlserver://连接的服务器地址:端口号;databasename=数据库名
3、创建命令对象Statement,其格式:
Statement 对象名=Connection对象.createStatement();
4、执行SQL语句,其格式:
插入、删除、更新:
statement对象.executeUpdate(sql语句) 返回int类型表示受影响的行数
5、关闭资源
statement对象.close();
Connection对象.close();
在10.34.61.101的电脑上,SQLServer2008中创建StuMng数据库,建立users表,其字段
id int自动增长
name varchar(50)
email varchar(50)
birthday date
用户名:sa,密码:123456
利用Java程序向该数据库表增加记录
'张三' '123@123.com' '1997-12-2'
import java.sql.*;
public class Test {
public static void main(String[] args) {
try {
//1、注册驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//2、建立与数据库的连接
Connection conn = DriverManager.getConnection("jdbc:sqlserver://10.34.61.101:1433;" +
"databasename=StuMng","sa","123456");
//3、创建Statement对象
Statement stmt = conn.createStatement();
//4、执行sql语句
//插入
//String sql = "insert into users(name,email,birthday) values('张三','123@123.com','1997-9-1')";
//更新
//String sql = "update users set name='软件123',email='ls@123.com' where id=1";
//删除
String sql = "delete from users where id<5";
int i = stmt.executeUpdate(sql);
//System.out.println("插入了" + i + "行");
//System.out.println("更新了" + i + "行");
System.out.println("删除了" + i + "行");
//关闭资源
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Java对数据库实现查询:
1、注册驱动:
Class.forName("驱动程序类名加上包名");
2、建立与数据库的连接,获得Connection对象,其格式:
Connection 对象名=DriverManager.getConnection("url","用户名","密码")
连接SQL Server的url格式:
jdbc:sqlserver://连接的服务器地址:端口号;databasename=数据库名
3、创建命令对象Statement,其格式:
Statement 对象名=Connection对象.createStatement();
4、执行查询的sql语句,其格式:
ResultSet 对象名 = Statement对象.executeQuery(sql语句)
ResultSet用于保存JDBC执行查询时返回的结果集,这个结果集封装在一个逻辑表格中
在ResultSet内部有一个指向表格数据行的指针,ResultSet初始化时,这个指针指向表格
的第一行的前面位置
常用方法:
1)、boolean next():用于将指针指向下一行,如果下一行有数据,返回true,否则返回false
while(ResultSet对象.next()) //遍历所有的行
{
}
2)、xxx getXxx(String 字段名) ;获得某行对应的某个字段的值
xxx表示在数据库该字段的数据类型
int i = ResultSet对象.getInt("id")
这里的i获得字段id的值,因为字段id为int类型,所以这里用getInt方法,并且返回int
String n = ResulstSet对象.getString("name")
3)、xxx getXxx(int index):获得某行第index个字段的值
int i = ResultSet对象.getInt(1) //获得某行第1个字段的值
String n = ResultSet对象.getString(2)
4)、close():关闭结果集
5、关闭资源,先创建后关闭
ResultSet对象.close();
Statement对象.close();
Connection对象.close();
import java.sql.*;
public class Test {
public static void main(String[] args) {
try {
//1、注册驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//2、建立与数据库的连接
Connection conn = DriverManager.getConnection("jdbc:sqlserver://10.34.61.101:1433;" +
"databasename=StuMng","sa","123456");
//3、创建Statement对象
Statement stmt = conn.createStatement();
//4、执行查询
String sql = "select * from users";
//执行查询后,返回结果集对象
ResultSet rs = stmt.executeQuery(sql);
//对结果集进行操作,获得所有行对应的字段值
while(rs.next())
{
//获得指针所指向行对应的字段值
int i = rs.getInt("id");//获得该行字段名为id的字段值
String n = rs.getString(2); //获得该行第2个字段的值
String e = rs.getString("email");
String b = rs.getString(4);
//输出
System.out.println(i + " | " + n + " | " + e + " | " + b);
}
//5、关闭资源,先创建后关闭
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
通过Statement执行Sql语句时,每次执行SQL语句,都会对其进行编译,当相同的SQL语句执行多次,
Statement对象就会对数据库频繁编译相同的SQL语句,会降低数据库的访问效率
为了解决此问题,Statement提供了一个子类PreparedStatement,这个类可以对SQL语句进行
预编译,当相同的SQL语句再次执行时,就不需要对sql语句再次编译,从而提高效率
利用PreparedStatement操作数据库的步骤:
1、注册驱动:
Class.forName("驱动程序类名加上包名");
2、建立与数据库的连接,获得Connection对象,其格式:
Connection 对象名=DriverManager.getConnection("url","用户名","密码")
连接SQL Server的url格式:
jdbc:sqlserver://连接的服务器地址:端口号;databasename=数据库名
3、创建命令对象PreparedStatement,其格式:
PreparedStatement 对象名=Connection对象.prepareStatement(sql语句);
这里的SQl语句中的字段值可以用?代替,成为占位符
String sql = "insert into users(name,email,birthday) values(?,?,'1997-9-1')";
这时还需要对sql语句中占位符赋值
PreparedStatement对象.setXxx(int index,Xxx 值) 表示对第index个占位符赋值
Xxx表示对应的?值的数据类型
PreparedStatement对象.setString(1,"张三");
PreparedStatement对象.setString(2,"123@123.com")
4、执行SQL语句,其格式:
插入、删除、更新:
PreparedStatement对象.executeUpdate() 返回int类型表示受影响的行数
查询
ResultSet 对象名=PreparedStatement对象.executeQuery()
5、关闭资源
ResultSet对象.close();
Preparedstatement对象.close();
Connection对象.close();
import java.sql.*;
public class Test {
public static void main(String[] args) {
try {
//1、注册驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//2、建立与数据库的连接
Connection conn = DriverManager.getConnection("jdbc:sqlserver://10.34.61.101:1433;" +
"databasename=StuMng","sa","123456");
//3、创建PreparedStatement对象
String sql = "insert into users(name,email,birthday) values(?,?,'1997-9-1')";
PreparedStatement pst = conn.prepareStatement(sql);
//对占位符赋值
pst.setString(1,"张三");
pst.setString(2,"123@123.com");
//4、执行SQL语句
int i = pst.executeUpdate();
System.out.println("插入了" + i + "行");
pst.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4、执行sql语句
插入、删除、修改,其格式:
statement对象.executeUpdate(sql语句) 返回受影响的行数int
查询:
statement对象.executeQuery(sql语句) 返回ResultSet对象结果集
while(ResultSet对象.next())
{
ResultSet对象.getXxx()获得某行某字段的值
}
5、关闭资源,先创建后关闭
ResultSet对象.close();
Statement对象.close();
Connection对象.close();
import java.sql.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
//创建Scanner对象,用于输入
Scanner scn = new Scanner(System.in);
int choice = -1;
do
{
System.out.println("请输入你的选择");
System.out.println("1:增加单词;2:查询单词;3:修改单词;4:删除单词;5:退出");
try
{
//接受用户的输入
choice = Integer.parseInt(scn.nextLine());
}catch(Exception ex)
{
System.out.println("请输入数字");
continue;
}
switch(choice)
{
case 1:
addWord(scn);//自定义方法,增加单词
break;
case 2:
query(scn); //查询
break;
case 3:
case 4:
}
}while(choice!=5);
}
private static void query(Scanner scn)
{
System.out.println("请输入要查询的词");
String word = scn.nextLine();
//查询的sql语句
String sql = "select * from dict where chinese='" + word + "' or english='" + word + "'";
Connection conn = getConnection(); //获得连接,调用自定义方法
try {
//创建Statement对象
Statement stmt = conn.createStatement();
//执行查询,返回ResultSet对象
ResultSet rs = stmt.executeQuery(sql);
//遍历结果集
while(rs.next())
{
String cha = rs.getString(2);
String en = rs.getString(3);
System.out.println(cha + "---" + en);
}
//关闭资源
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//自定义方法,用于获得与数据库的连接
private static Connection getConnection()
{
try {
//注册驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection conn = null;
//获得连接对象
try {
conn = DriverManager.getConnection("jdbc:sqlserver://10.34.61.101:1433;databasename=dictionary","sa","123456");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//自定义方法,用于增加单词
private static void addWord(Scanner scn)
{
System.out.println("请输入中文");
String chinese = scn.nextLine();
System.out.println("请输入对应的英文");
String english = scn.nextLine();
//建立与数据库的连接,调用自定义方法
Connection conn = getConnection();
try {
//创建Statement对象
Statement stmt = conn.createStatement();
//sql语句
String sql = "insert into dict(chinese,english) values('" + chinese + "','" + english + "')";
//insert into dict(chinese,english) values('软件','english')
//执行sql语句
int i = stmt.executeUpdate(sql);
if(i>0)
{
System.out.println("单词增加成功");
}
else
{
System.out.println("单词增加失败");
}
//关闭资源
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
|