import java.sql.Connection。
import java.sql.DriverManager
import java.sql.PreparedStatement
import java.sql.ResultSet
import java.sql.SQLException
import javax.naming.Context
import javax.naming.InitialContext
import javax.naming.NamingException
import javax.sql.DataSource
public class DBCon {
//数据库驱动对象
public static final String DRIVER="oracle.jdbc.driver.OracleDriver"
//数据库连接地址(数据库名)
public static final String URL="jdbc:oracle:thin:@localhost:1521:orcl"
//登陆名
public static final String USER="FM"
//登陆密码
public static final String PWD="FM"
//创建数据库连接对象
private Connection con=null
//创建数据库预编译对象
private PreparedStatement ps=null
//创建结果集
private ResultSet rs=null
//创建数据源对象
public static DataSource source=null
// //静态代码块
// static{
//
// //初始化配置文件context
// try {
// Context context=new InitialContext()
// source=(DataSource)context.lookup("java:comp/env/jdbc/webmessage")
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace()
// }
//
//
// }
/**
* 获取数据库连接
*/
public Connection getCon(){
try {
Class.forName(DRIVER)
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
try {
con=DriverManager.getConnection(URL,USER,PWD)
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
return con
}
// /**
// * 获取数据库连接
// */
// public Connection getCon(){
//
// try {
// con=source.getConnection()
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace()
// }
//
// return con
// }
/**
* 关闭所有资源
*/
public void closeAll(){
if(rs!=null)
try {
rs.close()
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
if(ps!=null)
try {
ps.close()
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
if(con!=null)
try {
con.close()
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
}
/**
* @param sql数据库更新(增、删、改) 语句
* @param pras参数列表(可传,可不传,不传为NULL,以数组形式存在)
* @return 返回受影响都行数
*/
public int update(String sql,String... pras){
int resu=0
con=getCon()
try {
ps=con.prepareStatement(sql)
for(int i=0i<pras.lengthi++){
ps.setString(i+1,pras[i])
}
resu=ps.executeUpdate()
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
finally{
closeAll()
}
return resu
}
/**
* @param sql数据库查询语句
* @param pras参数列表(可传,可不传,不传为NULL,以数组形式存在)
* @return 返回结果集
*/
public ResultSet query(String sql,String... pras){
con=getCon()
try {
ps=con.prepareStatement(sql)
if(pras!=null)
for(int i=0i<pras.lengthi++){
ps.setString(i+1, pras[i])
}
rs=ps.executeQuery()
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
return rs
}
}
import java.sql.ResultSet//都是导入一些下面需要用到的类String ConnStr="jdbc:microsoft:sqlserver://WINJUE:1433DatabaseName=library"//jdbc连接数据库url
public sqlServer() {
try {
Class.forName(DBDriver).newInstance() //加载SQLServer驱动程序,DBDriver是你上面的代码
conn=DriverManager.getConnection(ConnStr,"sa","sa")//和数据库建立连接,ConnStr里面的://WINJUE:1433DatabaseName=library 分别是主机地址:端口号你自己建的数据库(database)
}
catch(SQLException e) { //捕获SQL异常
System.out.println(e.getMessage())//要是出现异常,捕获到后,这句代码会把异常的信息(出错的原因之类的)打印出来。
}
catch(Exception e) { //捕获异常,这个是总的,所以不能和上面的顺序颠倒,先小到大,我连ORACLE和MYSQL,这个我通常不要,只须捕获SQL异常就OL
System.out.println(e.getMessage())
}
}
public Connection getConn(){ //获取连接方法
return conn
}
public void insert(String sql) {//增删改
try {
Statement stm=conn.createStatement()调用conn下的方法,创建Statement对象
stm.executeUpdate(sql)//调用Statement下的方法执行SQL语句
System.out.println("操作成功")
}
catch(Exception e){
System.out.println(e.getMessage())//如上
}
}
public ResultSet query(String sql){ //查询
try{
Statement stm=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)
rs=stm.executeQuery(sql)//如上
}
catch(Exception e){
System.out.println(e.getMessage())
}
return rs
}
public static void main(String args[]){
sqlServer conn=new sqlServer()//创建sqlServer,就是你上面的类,以便调用里面的方法
ResultSet rs=conn.query("select * from Orders")//调用query方法,执行SQL语句后,把结果保存到结果集里
//conn.insert("delete from BookInfo where BookName =" +"\'悟空传\'")
//conn.insert("insert into BookInfo (BookID,BookName,Author,KeyWord) values (14445678,'悟空传','今何在','孙悟空')")
try{
while(rs.next()){ //循环,判断结果集里的记录,一条条往下走,是否还有下一条记录,若是返回真,继续走
System.out.print(rs.getString("OrderID"))
//System.out.print(rs.getString("U_age"))
}
rs.close() //关闭结果集
}
catch (Exception e){
System.out.println(e.getMessage())
}
}
}
注:
TYPE_FORWARD_ONLY:缺省类型。只允许向前访问一次,并且不会受到其他用户对该数据库所作更改的影响。
TYPE_SCROLL_INSENSITIVE:允许在列表中向前或向后移动,甚至能进行特定定位,例如移至列表中的第四个记录或从当前位置向后移动两个记录。不会受到其他用户对该数据库所作更改的影响。
TYPE_SCROLL_SENSITIVE:象 TYPE_SCROLL_INSENSITIVE 相同,允许在记录中定位。这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从 ResultSet 中消失。类似的,对数据值的更改也将反映在 ResultSet 中。
1.首先要去Microsoft官网下载sqljdbc2.0驱动——Microsoft SQL Server JDBC Driver 2.0.exe,很小大概就4M,解压后里面有2个Jar包,sqljdbc4.jar和sqljdbc.jar,这两个都一样,只是针对你的JDK的版本的不同,如果你是JDK6.0直接导入sqljdbc4.jar,以下版本的导入sqljdbc.jar,如果怕麻烦的,两个都导进去也行。2.包导完了,现在启动SQL配置器,SQL2000的默认端口是1433,所以只要开启端口就能连得上,但08的端口据说是动态的,具体的本人也不清楚,就是因为这个端口我也被整了2天,最后终于连上了
打开配置器:
将IP ALL的TCP动态端口(默认1163)改为1433,不改也行,因为大部分人的习惯是用默认的1433,在IP2已启用选择——是,确定。
同样的方法,开启客户端的TCP/IP,端口也为1443,如图:
然后在DOS命令中输入测试 telnet 127.0.0.1 1433,
如果结果只有一个光标在闪动,那么就说明127.0.0.1 1433端口已经打开。
如果出现连接主机端口1433没打开,久要换端口。
一ODBC建立数据源
1 利用Java应用程序访问SQL Server2000数据库
(1)建立数据库
启动“Microsoft SQL Server2000”,打开“企业管理器”在“数据库”中建立名为“学生管理系统”的数据库,并在其下制作名为“学生信息”的数据表,如图1示。
(2)建立(ODBC)数据源和驱动程序
在控制面板上通过“管理工具”的“数据源(ODBC)”打开“ODBC数据源管理器”对话框,单击“系统DSN”选项卡,然后单击“添加”按钮,得到“创建数据源”对话框,选择“SQL Server”并单击“完成”按钮,在出现的“建立新的数据源到SQL Server”对话框中的“数据源名称”项填写“madata”并选取“服务器名”,然后单击“下一步”按钮,选择“使用网络登录ID的Windows NT验证”项目,单击“下一步”按钮,把默认的数据库改为“mydata”,再单击“下一步”,单击“完成”按钮,然后可以单击“测试数据源”,成功后,单击“确定”按钮,完成了(ODBC)数据源和驱动程序的建立。
(3)编写Java程序
package com.test1
import java.util.*
import java.awt.*
import java.awt.event.*
import javax.swing.*
import java.sql.*
public class Test extends JFrame{
JPanel jp1,jp2
JLabel jl1
JButton jb1,jb2,jb3,jb4
JTable jt=null
JScrollPane jsp=null
JTextField jtf
PreparedStatement ps=null
Connection ct=null
ResultSet rs=null
Vector rowData,columName
public static void main(String args[])
{
Test test=new Test()
}
public Test()
{
jp1=new JPanel()
jl1=new JLabel("请输入名字:")
jtf=new JTextField(10)
jb1=new JButton("查询:")
jp1.add(jl1)
jp1.add(jtf)
jp1.add(jb1)
jp2=new JPanel()
jb2=new JButton("添加:")
jb3=new JButton("修改:")
jb4=new JButton("删除:")
jp2.add(jb2)
jp2.add(jb3)
jp2.add(jb4)
columName = new Vector()
columName.add("学号")
columName.add("姓名")
columName.add("班级")
columName.add("系别")
columName.add("年龄")
columName.add("性别")
columName.add("籍贯")
rowData =new Vector()
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")
ct=DriverManager.getConnection("jdbc:odbc:mydata")
ps=ct.prepareStatement("select *from 学生信息")
rs=ps.executeQuery()
while(rs.next())
{
Vector hang=new Vector()
hang.add(rs.getString(1))
hang.add(rs.getString(2))
hang.add(rs.getString(3))
hang.add(rs.getString(4))
hang.add(rs.getInt(5))
hang.add(rs.getString(6))
hang.add(rs.getString(7))
rowData.add(hang)
}
}
catch(Exception e)
{
System.out.println("数据库加载失败!")
}
finally
{
}
System.out.println("数据库加载成功!")
jt=new JTable(rowData,columName)
jsp=new JScrollPane(jt)
this.add(jp1,"North")
this.add(jsp)
this.add(jp2,"South")
this.setSize(400,300)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
this.setVisible(true)
}
}
注意其中要引入jar包sqljdbc 2.0