在java函数库中,有一组专门处理数据库连接的API:JDBC
JDBC即java DataBase Connection 数据库连接。
JDBC能够让我们完成许多事情
1.完成数据库的连接创建
2.传送SQL命令给数据库,完成数据库操作及数据表
3.接受和处理数据库执行的结果
Jdbc在使用中常见的有三类:
JDBC—ODBC桥连接 JDBC连接 JDBC网络连接
连接数据库步骤
JAVA与SQLServer数据库连接总结
1 jdbc-odbc桥方式 2
1.1 建立ODBC数据源: 2
1.2 导入包: 2
1.3 装载驱动: 2
1.4 建立连接: 2
1.5 建立载体: 3
1.6 发出数据请求: 3
1.7 处理结果集: 3
1.8 获得元数据信息(表的列定义信息): 3
1.9 关闭数据库各对象: 4
2 JDBC直接连接SQLServer数据库 5
2.1 配置jdk加入微软的jar包 5
2.2 装载驱动: 5
2.3 建立连接: 5
2.4 其他步骤说明: 5
1 jdbc-odbc桥方式
1.1 建立ODBC数据源:
设置——〉控制面板——〉管理工具——〉数据源(ODBC)—
—〉系统DSN——〉添加——〉选择SQLServer驱动——>填写数
据源名字——〉选择服务器(本地服务器可以写.)——〉选择
登陆方式(默认使用windows NT验证)——〉更改默认数据库
为所有数据库——〉完成测试成功则建立完毕。
1.2 导入包:
import java.sql.*;
1.3 装载驱动:
DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
或者:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
第一种方式比较常用,也容易理解;
1.4 建立连接:
Connection con = DriverManager.getConnection
("jdbc:odbc:xx");
其中xx是1.1建立的数据源名字,如果建立的数据源选择的
windowsNT验证方式,则上面语句即可;
如果1.1所建立的数据源登陆方式选择的是SQL用户验证,则这
里要写成:
Connection con = DriverManager.getConnection
("jdbc:odbc:xx","用户名","密码");
其中的"用户名","密码"分别是SQLServer所建立的“登陆”用
户,并具有对所用库的操作权限;
1.5 建立载体:
Statement st = con.createStatement();
1.6 发出数据请求:
查询数据操作:
ResultSet rs = st.executeQuery("select * from titles");
该语句将sql语句传递给数据库并返回一个结果集rs,即查询结
果放在rs对象中;
更新数据操作:
int count=st.executeUpdate("update USERS set
username='aaa' where id=3");
所有对数据库进行的具有更新性质的操作(包含
update,insert,delete等)都要调用这个方法,返回结果是一
个整数,即该操作所影响的行数;
1.7 处理结果集:
rs.next()
将结果集rs中的行指针向后移动一行,注意行指针最初在第一
行之前,并没有指向第一行。该方法返回一个布尔值,如果是
true则表示可以移动到下一行,否则表示已经移动到记录集末
尾;
rs.getString()
如果移动到某行,可以通过该方法获取该行的某列数据,其调
用方式是:
rs.getString("列名")
或者
rs.getString(列序号)
注意:列序号是从1开始
1.8 获得元数据信息(表的列定义信息):
ResultSetMetaData meta = rs.getMetaData();
rs.getMetaData()返回结果集rs的元信息(结果集的列定义信
息)
meta.getColumnCount()
返回元数据中的列的数量;
meta.getColumnName(列序号)
返回元数据中的某列的列名;
其常用方式是:
ResultSetMetaData meta = r.getMetaData();
for (int i = 1; i <=
meta.getColumnCount(); i++)
{
System.out.print
(meta.getColumnName(i)+" ");//字段名称
}
System.out.println();
1.9 关闭数据库各对象:
按照建立顺序逆序关闭各对象:
rs.close();//关闭结果集
st.close();//关闭载体
conn.close();//关闭连接
2 JDBC直接连接SQLServer数据库
注意:
该方法不需要建立ODBC数据源;
需要配置SQLServer数据库属性中的安全项目中为SQL
和windowsNT系统验证模式。
2.1 配置jdk加入微软SQLSever的jar包
2.2 装载驱动:
DriverManager.registerDriver(new
com.microsoft.jdbc.sqlserver.SQLServerDriver());
2.3 建立连接:
Connection con = DriverManager.getConnection
("jdbc:microsoft:sqlserver://localhost:1433;DatabaseNam
e=库名","用户名","密码");
其中:
//localhost是数据库的主机地址,本地机即是
localhost;
1433为数据库端口号,默认是1433,如果数据库配置
不是该端口需要对应修改;
库名为所要操作的数据库名字,注意不是表名;
用户名、密码为SQLServer系统设置“登录”,并具有
对库名所指数据库的操作权限,默认可以用sa;
2.4 其他步骤说明:
以上完成后,其他步骤和使用方法完全同第1种方式一致。
一般以JDBC直接连接的常用代码段如下:
String dbUrl =
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName
=mini";
String user="sa"; //用户名
String password="";//密码
try
{
// 装载驱动程序
DriverManager. registerDriver (new
com.microsoft.jdbc.sqlserver.SQLServerDriver());
//建立连接
Connection conn =
DriverManager.getConnection(dbUrl,user,password);
Statement st = conn.createStatement();
// 执行,获得数据集
ResultSet rs =st.executeQuery("SELECT *
FROM users");
//获得元数据
ResultSetMetaData meta =
rs.getMetaData();
for (int i = 1; i <=
meta.getColumnCount(); i++)
{
System.out.print
(meta.getColumnName(i)+" ");//字段名称
}
System.out.println();
//循环打印结果中的信息
while(r.next())
{
System.out.println
(rs.getString(1)+" "+rs.getString(2) +" "+
rs.getString(3) );
}
//关闭
rs.close();
st.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
关于SQL语句可以参考SQL语句
关于java的数据库的操作范例:
1.提取单条记录
/*
import java.sql.*;
private Connection conn=null;
private Statement stmt=null;
private ResultSet rs=null;
*/
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:%%1";
conn=DriverManager.getConnection(url,%%2,%%3);
stmt=conn.createStatement();
rs=stmt.executeQuery(%%4);
rs.next();
int %%5=rs.getInt(%%6);
//String %%5=rs.getString(%%6);
}catch(Exception e){
e.printStackTrace();
}
finally{
try {
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
2.单值比较
/*
import java.sql.*;
private Connection conn=null;
private Statement stmt=null;
private ResultSet rs=null;
*/
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:%%1";
conn=DriverManager.getConnection(url,%%2,%%3);
stmt=conn.createStatement
(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDAT
ABLE);
rs=stmt.executeQuery(%%2);
rs.next();
int %%6=rs.getInt(%%7);
if(%%6==%%4)
{
%%5
}
}
catch (Exception e) {
e.printStackTrace();
}
finally{
try {
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
3.显示表格
/*
import java.awt.*;
import javax.swing.*;
import java.sql.*;
import javax.swing.table.*;
private Connection conn=null;
private Statement stmt=null;
private ResultSet rs=null;
*/
String[] colHeads=new String[]
{"au_fname","Phone","City"};
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:%%1";
conn=DriverManager.getConnection(url,%%2,%%3);
stmt=conn.createStatement();
rs=stmt.executeQuery("Select Count(*) As
au_count From %%5");
rs.next();
int iCount=rs.getInt("au_count");
Object[][] data=new Object[iCount][];
int i=0;
rs=stmt.executeQuery("Select * From %%5");
while(rs.next()){
data[i]=new Object[iCount];
data[i][0]=rs.getString("au_fname");
data[i][1]=rs.getString("Phone");
data[i][2]=rs.getString("City");
i++;
}
JTable table=new JTable(data,colHeads);
JScrollPane jsp=new JScrollPane(table);
this.add(jsp);
}catch(Exception e){
e.printStackTrace();
}
finally{
try {
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
4.操作表格
/*
import java.awt.*;
import javax.swing.*;
import java.sql.*;
import javax.swing.table.*;
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
*/
JTable table;
Object[][] data;
JButton jb;
JScrollPane jsp;
JComboBox jcb;
JCheckBox jchb;
jcb=new JComboBox();
jchb=new JCheckBox();
jcb.addItem("男");
jcb.addItem("女");
String[] colHeads = { "id", "性别","是否" };
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:%%1";
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
rs = stmt.executeQuery("Select Count(id) As
count From %%2");
rs.next();
int iCount = rs.getInt("count");
data = new Object[iCount][];
int i = 0;
rs = stmt.executeQuery("Select * From %%2");
while (rs.next()) {
data[i] = new Object[iCount];
data[i][0] = rs.getString("id");
data[i][1] = rs.getString("gender");
data[i][2] = rs.getString("isMember");
i++;
}
table = new JTable();
DefaultTableModel dt = new DefaultTableModel
(data, colHeads); //
table.setModel(dt);
jsp = new JScrollPane(table);
this.add(jsp, BorderLayout.CENTER);
TableColumn tc = table.getColumn("性别");
TableColumn tc2=table.getColumn("是否");
tc.setCellEditor(new DefaultCellEditor(jcb));
tc2.setCellEditor(new DefaultCellEditor(jchb));
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
JPanel jp2 = new JPanel();
this.add(jp2, BorderLayout.NORTH);
JPanel jp = new JPanel(new FlowLayout());
jp2.add(jp);
jp.add(new JTextField(10));
5.数值范围查询
/*
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
private Connection conn = null;
private PreparedStatement pst = null;
private ResultSet rs = null;
*/
String[] colHeads=new String[]{"id","name","price"};
JScrollPane jsp;
JTable table;
Object[][] data;
int min = Integer.parseInt(jcb1.getSelectedItem
().toString());
int max = Integer.parseInt(jcb2.getSelectedItem
().toString());
String sql = "Select Count(*) As pro_count From %%2
Where %%3 Between ? And ?";
try {
conn = DriverManager.getConnection(url);
String url="jdbc:odbc:%%1";
pst = conn.prepareStatement(sql);
pst.setInt(1,min);
pst.setInt(2,max);
rs = pst.executeQuery();
rs.next();
int iCount = rs.getInt("pro_count");
Object[][] data = new Object[iCount][];
pst=conn.prepareStatment("Select * From %%2 Where %%3
Between ? And ?");
int i = 0;
while (rs.next()) {
data[i] = new Object[3];
data[i][0] = rs.getString("id");
data[i][1] = rs.getString("name");
data[i][2] = rs.getString("price");
i++;
}
table=new JTable();
DefaultTableModel dt = new DefaultTableModel
(data, colHeads);
table.setModel(dt);
jsp=new JScrollPane(table);
this.add(jsp,BorderLayout.CENTER);
} catch (Exception e1) {
e1.printStackTrace();
} finally{
try {
if(rs!=null)
rs.close();
if(pst!=null)
pst.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
6.关闭时关闭连接
//import java.sql.*;
addWindowListener(new WindowAdapter{
public void windowClosing(WindowEvent wevent){
if(stmt!=null){
try {
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
7.执行命令
/*
import java.sql.*;
private Connection conn=null;
private PreparedStatement pst=null;
*/
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:%%1";
conn=DriverManager.getConnection(url);
pst=conn.prepareStatement("Insert Into grade(%
%2) Values (?)");
pst.setInt(1,%%3);
//pst.setString(2,%%3);
pst.addBatch();
pst.executeBatch();
//pst.execute();
} catch (SQLException e){
e.printStackTrace();
}
finally{
try {
if (pst != null)
pst.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
8.Oracle8/8i/9i数据库(thin模式)
/*
import java.sql.*;
private Connection conn = null;
private Statement stmt = null;
*/
Class.forName
("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:%%1"; //%
%1为数据库的SID
conn= DriverManager.getConnection(url,%%2,%%3);
stmt=conn.createStatement();
9.DB2数据库
/*
import java.sql.*;
private Connection conn = null;
private Statement stmt = null;
*/
Class.forName("com.ibm.db2.jdbc.app.DB2Driver
").newInstance();
String url="jdbc:db2://localhost:5000/%%1"; //%%1为你的
数据库名
conn= DriverManager.getConnection(url,%%2,%%3);
stmt=conn.createStatement();
10.Sql Server7.0/2000数据库
/*
import java.sql.*;
private Connection conn = null;
private Statement stmt = null;
*/
Class.forName
("com.microsoft.sqlserver.jdbc.SQLServerDriver").newIns
tance();
//String
url="jdbc:microsoft:sqlserver://localhost:1433;Database
Name=%%1"; //7.0、2000
String
url="jdbc:sqlserver://localhost:1433;DatabaseName=%%1";
//2005
//%%1为数据库名
conn= DriverManager.getConnection(url,%%2,%%3);
stmt=conn.createStatement();
11.Sybase数据库
/*
import java.sql.*;
private Connection conn = null;
private Statement stmt = null;
*/
Class.forName("com.sybase.jdbc.SybDriver").newInstance
();
String url =" jdbc:sybase:Tds:localhost:5007/%%1";//%%1
为你的数据库名
Properties sysProps = System.getProperties();
sysProps.put("user",%%2);
sysProps.put("password",%%3);
conn= DriverManager.getConnection(url, SysProps);
stmt=conn.createStatement();
12.Informix数据库
/*
import java.sql.*;
private Connection conn = null;
private Statement stmt = null;
*/
Class.forName
("com.informix.jdbc.IfxDriver").newInstance();
String url = "jdbc:informix-sqli://123.45.67.89:1533/%
%1:INFORMIXSERVER=myserver; //%%1为数据库名
conn= DriverManager.getConnection(url,%%2,%%3);
stmt=conn.createStatement();
13.MySQL数据库
/*
import java.sql.*;
private Connection conn = null;
private Statement stmt = null;
*/
//Class.forName("org.gjt.mm.mysql.Driver").newInstance
();
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/%%1"; //%%1为
数据库名
//String url ="jdbc:mysql://localhost:3306/%%1?
user=root&password=root&useUnicode=true&characterEncodi
ng=gbk";
//String url ="jdbc:mysql://localhost:3306/%%1?
characterEncoding=UTF-8";
//String url ="jdbc:mysql://localhost:3306/%%1?
characterEncoding=gbk";
conn= DriverManager.getConnection(url,%%2,%%3);
//,"root","root"
stmt=conn.createStatement();
14.PostgreSQL数据库
/*
import java.sql.*;
private Connection conn = null;
private Statement stmt = null;
*/
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/%%1"; //%%1为
数据库名
conn= DriverManager.getConnection(url,%%2,%%3);
stmt=conn.createStatement();
15.access数据库直连用ODBC的
/*
import java.sql.*;
private Connection conn = null;
private Statement stmt = null;
*/
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
String url="jdbc:odbc:Driver={MicroSoft Access Driver
(*.mdb)};DBQ="+application.getRealPath(%%1);
conn = DriverManager.getConnection(url,%%2,%%3);
stmt=conn.createStatement();
16.程序计时
long time1=System.currentTimeMillis();
long time2=System.currentTimeMillis();
long %%1=time2-time1; //interval
17.延时
try {
Thread.sleep(Integer.Parse(%%1));
} catch(InterruptedException e) {
e.printStackTrace();
}
18.连接Excel文件
/*
import java.sql.*;
private Connection conn = null;
private Statement stmt = null;
*/
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:driver={Microsoft Excel Driver
(*.xls)};DBQ="+application.getRealPath(%%1); // 不设置
数据源
conn= DriverManager.getConnection(url,%%2,%%3);
stmt=conn.createStatement();
19.GDI+时钟
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;
public class Clock extends JComponent {
private static final Color INTEGRAL_COLOR = new
Color(0, 128, 128);
private int radius;
private Calendar currentTime =
Calendar.getInstance();
private double s = 0.03;
public Clock(int radius) {
this.radius = radius;
}
public void setCurrentTime(Date time)
{
this.currentTime.setTime(time);
}
public void setCurrentTime(long millis) {
this.currentTime.setTimeInMillis
(millis);
}
public Dimension getPreferredSize() {
Insets insets = getInsets();
int r = (int) (radius == -1 ? 0 :
radius * (1 + s)) + 1;
return new Dimension(r * 2 +
insets.left + insets.right, r * 2
+ insets.top + insets.bottom);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint
(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Insets insets = getInsets();
int wid = getWidth() - insets.left -
insets.right;
int hei = getHeight() - insets.top -
insets.bottom;
int r = (int) ((Math.min(wid, hei)) / 2
/ (1 + s));
g2d.translate(insets.left + r * (1 +
s), insets.top + r * (1 + s));
g2d.scale(1, -1);
for (int i = 0; i < 60; i++) {
int angle = 90 - i * 6;
double pos[] = calcPos(r,
angle);
paintMinuteDot(r, g2d, pos[0],
pos[1], i % 5 == 0);
}
paintHourPointer(r, g2d);
paintMinutePointer(r, g2d);
paintSecondPointer(r, g2d);
paintCenterPoint(g2d);
g2d.scale(1, -1);
g2d.translate(-insets.left - r * (1 +
s), -insets.top - r * (1 + s));
}
private void paintCenterPoint(Graphics2D g2d) {
g2d.setColor(Color.BLUE);
Rectangle2D rect = new
Rectangle2D.Double(-2, -2, 4, 4);
g2d.fill(rect);
}
private void paintMinutePointer(int r,
Graphics2D g2d) {
int minute = currentTime.get
(Calendar.MINUTE);
int second = currentTime.get
(Calendar.SECOND);
double angle = 90 - (minute + second /
60.0) * 6;
Shape pointerShape =
createPointerShape(r * 0.8, r * 0.04, r * 0.08,
angle);
g2d.setColor(Color.LIGHT_GRAY);
g2d.fill(pointerShape);
g2d.setColor(Color.DARK_GRAY);
g2d.draw(pointerShape);
}
private void paintHourPointer(int r, Graphics2D
g2d) {
int hour = currentTime.get
(Calendar.HOUR);
int minute = currentTime.get
(Calendar.MINUTE);
int second = currentTime.get
(Calendar.SECOND);
double angle = 90 - (hour + minute /
60.0 + second / 3600.0) * 30;
Shape pointerShape =
createPointerShape(r * 0.6, r * 0.06, r * 0.1,
angle);
g2d.setColor(Color.LIGHT_GRAY);
g2d.fill(pointerShape);
g2d.setColor(Color.DARK_GRAY);
g2d.draw(pointerShape);
}
private Shape createPointerShape(double r1,
double r2, double r3,
double angle) {
GeneralPath gp = new
GeneralPath();
double[] pos = calcPos(r1,
angle);
double[] pos1 = calcPos(r2,
angle + 90);
gp.append(new Line2D.Double
(pos[0], pos[1], pos1[0], pos1[1]), true);
double[] pos2 = calcPos(r3,
angle + 180);
gp.lineTo((float) pos2[0],
(float) pos2[1]);
double[] pos3 = calcPos(r2,
angle + 270);
gp.lineTo((float) pos3[0],
(float) pos3[1]);
gp.closePath();
return gp;
}
private void paintSecondPointer(int r,
Graphics2D g2d) {
g2d.setColor(Color.BLACK);
int second = currentTime.get
(Calendar.SECOND);
int angle = 90 - second * 6;
double pos[] = calcPos(r * 0.9, angle);
double pos1[] = calcPos(r * 0.2, angle
+ 180);
Line2D line = new Line2D.Double(pos1
[0], pos1[1], pos[0], pos[1]);
g2d.draw(line);
}
private void paintMinuteDot(int r, Graphics2D
g2d, double x, double y,
boolean flag) {
g2d.setColor(flag ? Color.RED :
Color.BLACK);
if (flag) {
// Rectangle2D rect =
new Rectangle2D.Double(
Ellipse2D rect = new
Ellipse2D.Double(x - r * s, y - r * s, r * s
* 2, r * s *
2);
g2d.fill(rect);
} else {
// Rectangle2D rect =
new Rectangle2D.Double(
Ellipse2D rect = new
Ellipse2D.Double(x - r * 0.02, y - r * 0.02,
r * 0.04, r *
0.04);
g2d.fill(rect);
}
}
private double[] calcPos(double r, double
angle) {
double radian = Math.toRadians(angle);
double x = r * Math.cos(radian);
double y = r * Math.sin(radian);
return new double[] { x, y };
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel
(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
final Clock clock = new Clock(50);
clock.setBorder
(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JFrame f = new JFrame("GDI+时钟");
// f.setBounds(380,200,500,600);
f.this.add(clock, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation
(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
new Thread() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch
(InterruptedException ex) {
ex.printStackTrace();
}
clock.setCurrentTime(System.currentTimeMillis());
clock.repaint
();
}
}
}.start();
}
}
20.数据库存入二进制字段数据
/*
import java.sql.*;
private Connection conn = null;
private PreparedStatement stmt = null;
*/
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:%%1");
conn= DriverManager.getConnection(url,%%2,%%3);
InputStream pic = new FileInputStream(dto.get
(i).getLibPic());
sql = "INSERT INTO piclib (name,pic,sign,remark) VALUES
(?,?,?,?)";
pst = conn.prepareStatement(sql);
pst.setString(1, dto.get(i).getName());
pst.setBinaryStream(2,pic,(int)dto.get(i).getLibPic
().length());
21.数据库取出二进制字段数据
/*
import java.sql.*;
private Connection conn = null;
private ResultSet rs = null;
private PreparedStatement pstmt = null;
*/
public class DemoDisplayBinaryDataFromDatabase {
public static Connection getConnection() throws
Exception {
String driver =
"oracle.jdbc.driver.OracleDriver";
String url =
"jdbc:oracle:thin:@localhost:1521:databaseName";
String username = "name";
String password = "password";
Class.forName(driver);
Connection conn =
DriverManager.getConnection(url, username, password);
return conn;
}
}
public static class BitmapHelper
{
public static Bitmap BytesToBitmap(byte[]
Bytes)
{
MemoryStream stream = null;
try
{
stream = new MemoryStream
(Bytes);
return new Bitmap((Image)new
Bitmap(stream));
}
catch (ArgumentNullException ex)
{
throw ex;
}
catch (ArgumentException ex)
{
throw ex;
}
finally
{
stream.Close();
}
}
public static byte[] BitmapToBytes(Bitmap
Bitmap)
{
MemoryStream ms = null;
try
{
ms = new MemoryStream();
Bitmap.Save(ms,
Bitmap.RawFormat);
byte[] byteImage = new Byte
[ms.Length];
byteImage = ms.ToArray();
return byteImage;
}
catch (ArgumentNullException ex)
{
throw ex;
}
finally
{
ms.Close();
}
}
}
public static class BitmapHelper
{
public static Bitmap BytesToBitmap(byte[]
Bytes)
{
MemoryStream stream = null;
try
{
stream = new MemoryStream
(Bytes);
return new Bitmap((Image)new
Bitmap(stream));
}
catch (ArgumentNullException ex)
{
throw ex;
}
catch (ArgumentException ex)
{
throw ex;
}
finally
{
stream.Close();
}
}
public static byte[] BitmapToBytes(Bitmap
Bitmap)
{
MemoryStream ms = null;
try
{
ms = new MemoryStream();
Bitmap.Save(ms,
Bitmap.RawFormat);
byte[] byteImage = new Byte
[ms.Length];
byteImage = ms.ToArray();
return byteImage;
}
catch (ArgumentNullException ex)
{
throw ex;
}
finally
{
ms.Close();
}
}
}
/*
存进数据库可以直接用Image对象:
SqlCommand.Parameters.Add
("@image",SqlDbType.Image).Value=myImage;(myImage为
Image对象)
从数据库取出来,是byte数组,可以用上面的函数进行转换
*/
String query = "SELECT raw_column,
long_raw_column FROM binary_table WHERE id = ?";
try {
conn = getConnection();
Object[] results = new Object
[2];
pstmt = conn.prepareStatement
(query);
pstmt.setString(1, "0001");
rs = pstmt.executeQuery();
rs.next();
// materialize binary data onto
client
results[0] = rs.getBytes
("RAW_COLUMN");
results[1] = rs.getBytes
("LONG_RAW_COLUMN");
} finally {
rs.close();
pstmt.close();
conn.close();
}
22.批量执行SQL和存储过程
/*
import java.sql.*;
private Connection conn = null;
private PreparedStatement pst = null;
private CallableStatement cs = null;
*/
try {
Class.forName
("oracle.jdbc.driver.OracleDriver").newInstance();
String url =
"jdbc:oracle:thin:@localhost:1521:%%1"; // %%1为数据库
的SID
conn = DriverManager.getConnection(url,%%2,%
%3);
cs = conn.prepareCall("{call abc(?,?}");
pst = conn.prepareStatement("Insert Into grade
(%%1) Values (?)");
pst.setString(1, "");
// pst.setInt(2,%%2);
pst.addBatch();
pst.executeBatch();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pst != null)
pst.close();
if (cs != null)
cs.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
23.自动填入数据
/*
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
*/
Clipboard clipboard = Toolkit.getDefaultToolkit
().getSystemClipboard();
Transferable tText = new StringSelection("abcD");
clipboard.setContents(tText, null);
try {
Robot r = new Robot();
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_V);
r.keyRelease(KeyEvent.VK_V);
r.keyRelease(KeyEvent.VK_CONTROL);
} catch (AWTException e) {
e.printStackTrace();
}
24.验证码随机数
//import java.awt.*;
Random random = new Random(555L);
int %%1=random.nextInt(8999)+1000;
25.查数据库表的Id最大值
//import java.sql.*;
private int getTableId(Connection conn, String table) {
int returnId = 0;// 默认为无记录
String sqlString = "Select * From ?";
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(sqlString);
ps.setString(1, table);
rs = ps.executeQuery();
rs.afterLast();
returnId = rs.getRow();// 让returnId等
于表中记录总数
} catch (SQLException e) {
returnId = -1; // 捕获到异常则代表数据
库中没有此表
} finally {
if (returnId > 0) {
try {
ps =
conn.prepareStatement("Select Max(id) From ?");
ps.setString(1, table);
ps.addBatch();
rs=ps.executeQuery();
rs.next();
returnId=rs.getInt
("id");
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return returnId;
}
26.mysql分页
/*
import java.sql.*;
import java.util.*;
private Connection conn=null;
private PreparedStatement pst=null;
private ResultSet rs=null;
private ResultSetMetaData rsmd=null;
private int rowCount=0;
private int pageCount=0;
private int pageSize=0;
*/
String sqlStr=%%1;
pageSize=%%2; //2000
int ipage=%%3; //1
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e4) {
e4.printStackTrace();
}
try{
conn=DriverManager.getConnection
("jdbc:mysql://localhost:3306/%%1",%%2,%%3);
//conn=DriverManager.getConnection
("jdbc:mysql://localhost:3306/%%1?
characterEncoding=UTF-8",%%2,%%3);
//conn=DriverManager.getConnection
("jdbc:mysql://localhost:3306/%%1?
characterEncoding=gbk",%%2,%%3);
String sqlStr = "Select * From ? Where id>?
limit ?,?";
pst= con.prepareStatement(sqlStr);
int irows=pageSize*(ipage-1);
pst.setString(1, table1);
pst.setInt(2, targetid);
if (rs != null) {
rs.last();
rowCount = rs.getRow();
rs.first();
pageCount = (rowCount - 1) / pageSize +
1;
}
pst.setInt(3, irows);
pst.setInt(4, pageSize);
rs=pst.executeQuery();
//rsmd = rs.getMetaData();
if(rs!=null)
{
rs.last();
rowCount=rs.getRow();
rs.first();
pageCount=(rowCount-1)/pageSize+1;
}
rs=pst.executeQuery(strSql);
rsmd=rs.getMetaData();
}
catch(SQLException e)
{
e.printStackTrace();
}
Vector vData=new Vector();
try{
if(rs!=null)
{
while(rs.next())
{
String[] sData=new String
[rsmd.getColumnCount()];
for(int
j=0;j<rsmd.getColumnCount();j++)
{
sData[j]=rs.getString
(j+1);
}
vData.addElement(sData);
}
rs.close();
}
if(pst!=null)
pst.close();
if(conn!=null)
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
Vector %%4=vData;
27.Sql Server 2005分页
/*
import java.sql.*;
import java.util.*;
private Connection conn=null;
private PreparedStatement pst=null;
private ResultSet rs=null;
private ResultSetMetaData rsmd=null;
private int rowCount=0;
private int pageCount=0;
private int pageSize=0;
*/
String sqlStr=%%1;
pageSize=%%2; //2000
int ipage=%%3; //1
try {
Class.forName
("com.microsoft.sqlserver.jdbc.SQLServerDriver").newIns
tance();
} catch (ClassNotFoundException e4) {
e4.printStackTrace();
}
//String
url="jdbc:microsoft:sqlserver://localhost:1433;Database
Name=%%1"; //7.0、2000
String
url="jdbc:sqlserver://localhost:1433;DatabaseName=%%1";
//2005
try{
conn= DriverManager.getConnection(url,%%2,%%3);
SELECT TOP %%2 * FROM %%1 WHERE (ID NOT IN
(SELECT TOP %%2*%%3 id FROM %%1 ORDER BY id)) ORDER BY
ID
页大小
%%2
页数
%%3
String sqlStr = "Select top 1 * From ?
Where id>? limit ?,?"; //"Select top 1 * From ? Where
id>? limit ?,?"
pst= con.prepareStatement(sqlStr);
int irows=pageSize*(ipage-1);
pst.setString(1, table1);
pst.setInt(2, targetid);
if (rs != null) {
rs.last();
rowCount = rs.getRow();
rs.first();
pageCount = (rowCount - 1) / pageSize +
1;
}
pst.setInt(3, irows);
pst.setInt(4, pageSize);
rs=pst.executeQuery();
//rsmd = rs.getMetaData();
if(rs!=null)
{
rs.last();
rowCount=rs.getRow();
rs.first();
pageCount=(rowCount-1)/pageSize+1;
}
sqlStr+=(" limit "+irows+","+pageSize);
pst=con.createStatement();
rs=pst.executeQuery(strSql);
rsmd=rs.getMetaData();
}
catch(SQLException e)
{
e.printStackTrace();
}
Vector vData=new Vector();
try{
if(rs!=null)
{
while(rs.next())
{
String[] sData=new String
[rsmd.getColumnCount()];
for(int
j=0;j<rsmd.getColumnCount();j++)
{
sData[j]=rs.getString
(j+1);
}
vData.addElement(sData);
}
rs.close();
}
if(pst!=null)
pst.close();
if(conn!=null)
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
Vector %%4=vData;
28.Oracle分页
/*
import java.sql.*;
import java.util.*;
private Connection conn=null;
private PreparedStatement pst=null;
private ResultSet rs=null;
private ResultSetMetaData rsmd=null;
private int rowCount=0;
private int pageCount=0;
private int pageSize=0;
*/
String sqlStr=%%1;
pageSize=%%2; //2000
int ipage=%%3; //1
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:%%1";
try {
Class.forName(driver);
} catch (ClassNotFoundException e4) {
e4.printStackTrace();
}
try{
conn= DriverManager.getConnection(url,%%4,%%5);
String sqlStr = "Select * From ? Where id>?
limit ?,?"; //parition
pst= con.prepareStatement(sqlStr);
int irows=pageSize*(ipage-1);
pst.setString(1, table1);
pst.setInt(2, targetid);
if (rs != null) {
rs.last();
rowCount = rs.getRow();
rs.first();
pageCount = (rowCount - 1) / pageSize +
1;
}
pst.setInt(3, irows);
pst.setInt(4, pageSize);
rs=pst.executeQuery();
//rsmd = rs.getMetaData();
if(rs!=null)
{
rs.last();
rowCount=rs.getRow();
rs.first();
pageCount=(rowCount-1)/pageSize+1;
}
sqlStr+=(" limit "+irows+","+pageSize);
pst=con.createStatement();
rs=pst.executeQuery(strSql);
rsmd=rs.getMetaData();
}
catch(SQLException e)
{
e.printStackTrace();
}
Vector vData=new Vector();
try{
if(rs!=null)
{
while(rs.next())
{
String[] sData=new String
[rsmd.getColumnCount()];
for(int
j=0;j<rsmd.getColumnCount();j++)
{
sData[j]=rs.getString
(j+1);
}
vData.addElement(sData);
}
rs.close();
}
if(pst!=null)
pst.close();
if(conn!=null)
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
Vector %%4=vData;
29.生成GUID
//两种方式生成guid 与uuid
//需要comm log 库
/*
import java.net.*;
import java.security.*;
import java.util.*;
protected final org.apache.commons.logging.Log
logger = org.apache.commons.logging.LogFactory
.getLog(getClass());
public String valueBeforeMD5 = "";
public String valueAfterMD5 = "";
private static Random myRand;
private static SecureRandom mySecureRand;
private static String s_id;
private static final int PAD_BELOW = 0x10;
private static final int TWO_BYTES = 0xFF;
// Static block to take care of one time
secureRandom seed.
// It takes a few seconds to initialize
SecureRandom. You might
// want to consider removing this static block or
replacing
// it with a "time since first loaded" seed to
reduce this time.
// This block will run only once per JVM instance.
static {
mySecureRand = new SecureRandom();
long secureInitializer = mySecureRand.nextLong();
myRand = new Random(secureInitializer);
try {
s_id = InetAddress.getLocalHost().toString();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
*/
/*
* Default constructor. With no specification of
security option,
* this constructor defaults to lower security, high
performance.
*/
public RandomGUID() {
getRandomGUID(false);
}
/*
* Constructor with security option. Setting secure
true
* enables each random number generated to be
cryptographically
* strong. Secure false defaults to the standard
Random function seeded
* with a single cryptographically strong random
number.
*/
public RandomGUID(boolean secure) {
getRandomGUID(secure);
}
/*
* Method to generate the random GUID
*/
private void getRandomGUID(boolean secure) {
MessageDigest md5 = null;
StringBuffer sbValueBeforeMD5 = new StringBuffer
(128);
try {
md5 = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
logger.error("Error: " + e);
}
try {
long time = System.currentTimeMillis();
long rand = 0;
if (secure) {
rand = mySecureRand.nextLong();
} else {
rand = myRand.nextLong();
}
sbValueBeforeMD5.append(s_id);
sbValueBeforeMD5.append(":");
sbValueBeforeMD5.append(Long.toString(time));
sbValueBeforeMD5.append(":");
sbValueBeforeMD5.append(Long.toString(rand));
valueBeforeMD5 = sbValueBeforeMD5.toString();
md5.update(valueBeforeMD5.getBytes());
byte[] array = md5.digest();
StringBuffer sb = new StringBuffer(32);
for (int j = 0; j < array.length; ++j) {
int b = array[j] & TWO_BYTES;
if (b < PAD_BELOW)
sb.append('0');
sb.append(Integer.toHexString(b));
}
valueAfterMD5 = sb.toString();
} catch (Exception e) {
logger.error("Error:" + e);
}
}
/*
* Convert to the standard format for GUID
* (Useful for SQL Server UniqueIdentifiers, etc.)
* Example: C2FEEEAC-CFCD-11D1-8B05-00600806D9B6
*/
public String toString() {
String raw = valueAfterMD5.toUpperCase();
StringBuffer sb = new StringBuffer(64);
sb.append(raw.substring(0, 8));
sb.append("-");
sb.append(raw.substring(8, 12));
sb.append("-");
sb.append(raw.substring(12, 16));
sb.append("-");
sb.append(raw.substring(16, 20));
sb.append("-");
sb.append(raw.substring(20));
return sb.toString();
}
//valueBeforeMD5 //Seeding String
//valueAfterMD5 //rawGUID
//toString() //RandomGUID
//UUID uuid = UUID.randomUUID();
30.计算日期时间差
/*
import java.text.*;
import java.util.*;
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
*/
public static long fromDateStringToLong(String
inVal) { // 此方法计算时间毫秒
Date date = null; // 定义时间类型
SimpleDateFormat inputFormat = new
SimpleDateFormat("MM-dd-yy hh:mm");
try {
date = inputFormat.parse
(inVal); // 将字符型转换成日期型
} catch (Exception e) {
e.printStackTrace();
}
return date.getTime(); // 返回毫秒数
}
// 取得系统剪贴板里可传输的数据构造的
Java对象
Transferable t =
Toolkit.getDefaultToolkit().getSystemClipboard()
.getContents(null);
try {
if (t != null &&
t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
// 因为原系的剪贴板里有
多种信息, 如文字, 图片, 文件等
// 先判断开始取得的可传
输的数据是不是文字, 如果是, 取得这些文字
String s = (String)
t.getTransferData(DataFlavor.stringFlavor);
String[] arr = s.split
("\n");
StringBuilder sb = new
StringBuilder(1024);
for (String sss : arr)
{
if (!sss.trim
().equals("")) {
long
startT = fromDateStringToLong(sss); // 定义上机时间
long
endT = new Date().getTime(); // 定义下机时间
long ss
= (endT - startT) / (1000); // 共计秒数
int MM
= (int) ss / 60; // 共计分钟数
int hh
= (int) ss / 3600; // 共计小时数
int dd
= (int) hh / 24; // 共计天数
hh = hh
- dd * 24;
MM = MM
- (dd * 24 + hh) * 60;
sb.append((dd >= 100 ? "" : "0"));
sb.append((dd >= 10 ? "" : "0"));
sb.append(dd);
sb.append(" ");
sb.append(hh);
sb.append(":");
sb.append(MM);
sb.append("\r\n");
}
}
Clipboard clipboard =
Toolkit.getDefaultToolkit()
.getSystemClipboard();
Transferable tText =
new StringSelection(sb.toString());
clipboard.setContents
(tText, null);
}
} catch (UnsupportedFlavorException ex)
{
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}