用jdbc读取数据库能,怎么用jdbc连接sqlserver数据库查询数据
一、使用jdbc从数据库查询数据,java程序需要考虑哪些优化方法
一、准备工作(一):MySQL安装配置和基础学习
使用JDBC*作数据库之前,首先你需要有一个数据库。这里提供了3个链接供读者自学,如果曾有过SQL语言的使用经历(包括在学校中的课堂学习),前两个链接足以上手。
1.安装和配置:mysql安装图解 mysql图文安装教程(详细说明)
2.基本*作:21分钟 MySQL入门教程
3.简易命令查询:一千行MySQL学习笔记
建议边看入门教程,边练习,在练习insert、update、select、delete等基本*作的同时,将后面要用的表建好。
下图是我接下来用于演示的数据库的表。
二、准备工作(二):**数据库对应的jar包并导入
使用JDBC需要在工程中导入对应的jar包。数据库与JDBC包的对应关系可以参考各种数据库对应的jar包、驱动类名和URL格式。在Eclipse下的导入方法:
在工程的图标上右击,选择”Properties”,在”Java Bulid Path”中选择”Add External JARs…”,选择**并解压后获得的jar包。
如果对MySQL进行*作,这时下面的import就不会报错了:
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
除此以外,还需要JDBC的包,直接import即可。
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
三、JDBC基本*作
为了简单起见,与数据库相关的*作、命令、参数都被硬编码了。有兴趣的读者可以对这些进行探索,降低数据与*作的耦合性。
先看具体代码并实践,本文第五部分对用到的API稍作了研究。
下面的所有方法和数据成员都在public class JDBCOperation内部。
(1)定义记录的类(可选)
这样做主要是为了便于*作和接口定义,是非必须的。
static class Student{
private String Id;
private String Name;
private String Sex;
private String Age;
Student(String Name, String Sex, String Age){
this.Id= null;//default
this.Name= Name;
this.Sex= Sex;
this.Age= Age;
}
public String getId(){
return Id;
}
public void setId(String Id){
this.Id= Id;
}
public String getName(){
return Name;
}
public void setName(String Name){
this.Name= Name;
}
public String getSex(){
return Sex;
}
public void setSex(String Sex){
this.Sex= Sex;
}
public String getAge(){
return Age;
}
public void setage(String Age){
this.Age= Age;
}
}
(2)连接的获取
在*作前必须先获取与数据库的连接。
driver、url的格式同样可以参考各种数据库对应的jar包、驱动类名和URL格式。
private static Connection getConn(){
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/samp_db";
String username="root";
String password="";
Connection conn= null;
try{
Class.forName(driver);//classLoader,加载对应驱动
conn=(Connection) DriverManager.getConnection(url, username, password);
} catch(ClassNotFoundException e){
e.printStackTrace();
} catch(SQLException e){
e.printStackTrace();
}
return conn;
}
(3)insert
private static int insert(Student student){
Connection conn= getConn();
int i= 0;
String sql="insert into students(Name,Sex,Age) values(?,?,?)";
PreparedStatement pstmt;
try{
pstmt=(PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1, student.getName());
pstmt.setString(2, student.getSex());
pstmt.setString(3, student.getAge());
i= pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch(SQLException e){
e.printStackTrace();
}
return i;
}
(4)update
private static int update(Student student){
Connection conn= getConn();
int i= 0;
String sql="update students set Age='"+ student.getAge()+"' where Name='"+ student.getName()+"'";
PreparedStatement pstmt;
try{
pstmt=(PreparedStatement) conn.prepareStatement(sql);
i= pstmt.executeUpdate();
System.out.println("resutl:"+ i);
pstmt.close();
conn.close();
} catch(SQLException e){
e.printStackTrace();
}
return i;
}
(5)select
以select* from XXX为例。
private static Integer getAll(){
Connection conn= getConn();
String sql="select* from students";
PreparedStatement pstmt;
try{
pstmt=(PreparedStatement)conn.prepareStatement(sql);
ResultSet rs= pstmt.executeQuery();
int col= rs.getMetaData().getColumnCount();
System.out.println("============================");
while(rs.next()){
for(int i= 1; i<= col; i++){
System.out.print(rs.getString(i)+"\t");
if((i== 2)&&(rs.getString(i).length()< 8)){
System.out.print("\t");
}
}
System.out.println("");
}
System.out.println("============================");
} catch(SQLException e){
e.printStackTrace();
}
return null;
}
(6)delete
private static int delete(String name){
Connection conn= getConn();
int i= 0;
String sql="delete from students where Name='"+ name+"'";
PreparedStatement pstmt;
try{
pstmt=(PreparedStatement) conn.prepareStatement(sql);
i= pstmt.executeUpdate();
System.out.println("resutl:"+ i);
pstmt.close();
conn.close();
} catch(SQLException e){
e.printStackTrace();
}
return i;
}
二、怎么用jdbc连接sqlserver数据库查询数据
怎么用jdbc连接sqlserver数据库查询数据
.JDBC连接SQL Server的驱动安装,前两个是属于数据库软件,正常安装即可(注意数据库登陆不要使用windows验证)
<1>将JDBC解压缩到任意位置,比如解压到C盘program files下面,并在安装目录里找到sqljdbc.jar文件,得到其路径开始配置环境变量
在环境变量classpath后面追加 C:\Program Files\Microsoft SQL Server2005 JDBC Driver\sqljdbc_1.2\enu\sqljdbc.jar
<2>设置SQLEXPRESS服务器:
a.打开SQL Server Configuration Manager-> SQLEXPRESS的协议-> TCP/IP
b.右键单击启动TCP/IP
c.双击进入属性,把IP地址中的IP all中的TCP端口设置为1433
d.重新启动SQL Server 2005服务中的SQLEXPRESS服务器
e.关闭SQL Server Configuration Manager
<3>打开刚刚安装好的 SQL Server Management Studio,连接SQLEXPRESS服务器,新建数据库,起名字为sample
<4>打开Eclipse
a.新建工程-> Java-> Java project,起名为Test
b.选择eclipse->窗口->**项->Java->installed JRE编辑已经安装好的jdk,查找目录添加sqljdbc.jar
c.右键单击目录窗口中的Test,选择Build Path->Configure Build Path...,添加扩展jar文件,即把sqljdbc.jar添加到其中
<5>编写Java代码来测试JDBC连接SQL Server数据库
三、java怎样将读取数据写入数据库
Java可以使用JDBC对数据库进行读写。JDBC访问一般分为如下流程:
一、加载JDBC驱动程序:
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。
例如:
try{
//加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e){
System.out.println("找不到驱动程序类,加载驱动失败!");
e.printStackTrace();
}
成功加载后,会将Driver类的实例注册到DriverManager类中。
二、提供JDBC连接的URL连接URL定义了连接数据库时的协议、子协议、数据源标识。
书写形式:协议:子协议:数据源标识协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:(MySql的连接URL)
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk
useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为
gb2312或GBK,本参数必须设置为true。characterEncoding=gbk:字符编码方式。
三、创建数据库的连接
要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。
使用DriverManager的getConnectin(String url,String username,String password)方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。
例如:
//连接MySql数据库,用户名和密码都是root
String url="jdbc:mysql://localhost:3306/test";
String username="root";
String password="root";
try{
Connection con=
DriverManager.getConnection(url, username, password);
}catch(SQLException se){
System.out.println("数据库连接失败!");
se.printStackTrace();
}
四、创建一个Statement
要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式:
Statement stmt= con.createStatement();
PreparedStatement pstmt= con.prepareStatement(sql);
CallableStatement cstmt= con.prepareCall("{CALL demoSp(?,?)}");
五、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
具体实现的代码:
ResultSet rs= stmt.executeQuery("SELECT* FROM...");
int rows= stmt.executeUpdate("INSERT INTO...");
boolean flag= stmt.execute(String sql);
六、处理结果两种情况:
1、执行更新返回的是本次*作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。
使用结果集(ResultSet)对象的访问方法获取数据:
while(rs.next()){
String name= rs.getString("name");
String pass= rs.getString(1);//此方法比较高效(列是从左到右编号的,并且从列1开始)
}
七、关闭JDBC对象
*作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象
if(rs!= null){//关闭记录集
try{
rs.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(stmt!= null){//关闭声明
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(conn!= null){//关闭连接对象
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
扩展资料
样例
package first;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class lianjie{
public static void main(String[] args){
Runnable runnable= new Runnable(){
public void run(){
//声明Connection对象
Connection con;
//驱动程序名
String driver1="com.microsoft.sqlserver.jdbc.SQLServerDriver";
//URL指向要访问的数据库名
String url1="jdbc:sqlserver://IP地址和端口号;DateBaseName=数据库名";
//MySQL配置时的用户名
String user1="user";
//MySQL配置时的密码
String password1="user";
//声明Connection对象
Connection con1;
//驱动程序名
String driver2="com.microsoft.sqlserver.jdbc.SQLServerDriver";
//URL指向要访问的数据库名
String url2="jdbc:sqlserver://IP地址和端口号;DateBaseName=数据库名";
//MySQL配置时的用户名
String user2="user";
//MySQL配置时的密码
String password2="user";
//遍历查询结果集
try{
//加载驱动程序
Class.forName(driver1);
//1.getConnection()方法,连接MySQL数据库!!
con= DriverManager.getConnection(url1,user1,password1);
if(!con.isClosed())
System.out.println("成功连接到数据库!");
try{
//加载驱动程序
Class.forName(driver2);
//1.getConnection()方法,连接MySQL数据库!!
con1= DriverManager.getConnection(url2,user2,password2);
if(!con1.isClosed())
System.out.println("成功连接到数据库!");
//2.创建statement类对象,用来执行SQL语句!!
Statement statement= con.createStatement();
//要执行的SQL语句
String sql="use数据库名 select* from表名";
//3.ResultSet类,用来存放获取的结果集!!
ResultSet rs= statement.executeQuery(sql);
//要执行的SQL语句
String sql1="use tiantiana insert into Table_1(tiantian,qiqi,yuyu)VALUES(?,?,?)";
//3.ResultSet类,用来存放获取的结果集!!
PreparedStatement pst= con1.prepareStatement(sql1);
System.out.println("tiantian"+"/t"+"qiqi"+"/t"+"yuyu");
while(rs.next()){
System.out.print(rs.getString(1));
System.out.print(rs.getString(2));
System.out.print(rs.getString(3));
pst.setString(1,rs.getString(1));
pst.setString(2,rs.getString(2));
pst.setString(3,rs.getString(3));
pst.executeUpdate();
}
pst.close();
rs.close();
//2.创建statement类对象,用来执行SQL语句!!
Statement statement1= con.createStatement();
//要执行的SQL语句
String sql2="use数据库名 select* from表名";
//3.ResultSet类,用来存放获取的结果集!!
ResultSet rs1= statement1.executeQuery(sql2);
//要执行的SQL语句
String sql3="use tiantiana insert into Table_2(tiantian1,qiqi1,yuyu1)VALUES(?,?,?)";
//3.ResultSet类,用来存放获取的结果集!!
PreparedStatement pst1= con1.prepareStatement(sql3);
System.out.println("tiantian1"+"/t"+"qiqi1"+"/t"+"yuyu1");
while(rs1.next()){
System.out.print(rs1.getString(1));
System.out.print(rs1.getString(2));
System.out.print(rs1.getString(3));
pst1.setString(1,rs1.getString(1));
pst1.setString(2,rs1.getString(2));
pst1.setString(3,rs1.getString(3));
pst1.executeUpdate();
}
//关闭链接
rs1.close();
pst.close();
con1.close();
con.close();
} catch(ClassNotFoundException e){
//数据库驱动类异常处理
System.out.println("对不起,找不到驱动程序!");
e.printStackTrace();
} catch(SQLException e){
//数据库连接失败异常处理
e.printStackTrace();
}catch(Exception e){
// TODO: handle exception
e.printStackTrace();
}finally{
System.out.println("数据库数据成功获取!!");
}
} catch(ClassNotFoundException e){
//数据库驱动类异常处理
System.out.println("对不起,找不到驱动程序!");
e.printStackTrace();
} catch(SQLException e){
//数据库连接失败异常处理
e.printStackTrace();
}catch(Exception e){
// TODO: handle exception
e.printStackTrace();
}finally{
System.out.println("数据库数据成功获取!!");
}
}
};
ScheduledExecutorService service= Executors
.newSingleThreadScheduledExecutor();
//第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间
service.scheduleAtFixedRate(runnable, 10, 60*2, TimeUnit.SECONDS);
}
}
参考资料百度百科——Java数据库连接