javaweb資料庫實例
當然,首先要安裝有JDK(一般是JDK1.5.X)。然後安裝MySQL,這些都比較簡單,具體過程就不說了。配置好這兩個環境後,下載JDBC
驅動mysql-connector-java-5.0.5.zip(這個是最新版的)。然後將其解壓縮到任一目錄。我是解壓到D盤,然後將其目錄下的
mysql-connector-java-5.0.5-bin.jar加到classpath里,
具體如下:「我的電腦」-> 「屬性」 -> 「高級」 ->
「環境變數」,在系統變數那裡編輯classpath,將D:\mysql-connector-java-5.0.5\mysql-
connector-java-5.0.5-bin.jar加到最後,在加這個字元串前要加「;」,以與前一個classpath區分開。然後確定。
環境配置好了,很簡單。現在,先配置Java連接MySQL,設其用戶名為「root」,密碼為「root」。在命令行或用一個SQL的前端軟體創建Database。
我是用SQLyog的前端軟體來創建Database的。
先創建資料庫:
CREATE DATABASE SCUTCS;
接著,創建表:
CREATE TABLE STUDENT ( SNO CHAR(7) NOT NULL, SNAME VARCHAR(8) NOT NULL, SEX CHAR(2) NOT NULL, BDATE DATE NOT NULL, HEIGHT DEC(5,2) DEFAULT 000.00, PRIMARY KEY(SNO) );
然後插入數據,可以用SQL語句insert into <表名> values (value1, value2, ...);
也可以用SQLyog來操作
好了,創建好了。
下面,我們來編寫.java文件來演示一下如何訪問Java連接MySQL資料庫。
import java.sql.*; public class JDBCTest { public static void main(String[] args){
驅動程序名
String driver = "com.mysql.jdbc.Driver";
// URL指向要訪問的資料庫名scutcs
String url = "jdbc:mysql://127.0.0.1:3306/scutcs";
// MySQL配置時的用戶名
String user = "root";
// Java連接MySQL配置時的密碼
String password = "root";
try {
// 載入驅動程序
Class.forName(driver);
// 連續資料庫
Connection conn = DriverManager.getConnection(url, user, password);
if(!conn.isClosed())
System.out.println("Succeeded connecting to the Database!");
// statement用來執行SQL語句
Statement statement = conn.createStatement();
// 要執行的SQL語句
String sql = "select * from student";
結果集
ResultSet rs = statement.executeQuery(sql); System.out.println("-----------------"); System.out.println("執行結果如下所示:"); System.out.println("-----------------"); System.out.println(" 學號" + "\t" + " 姓名"); System.out.println("-----------------"); String name = null; while(rs.next()) {
選擇sname這列數據
name = rs.getString("sname");
// 首先使用ISO-8859-1字元集將name解碼為位元組序列並將結果存儲新的位元組數組中。
// 然後使用GB2312字元集解碼指定的位元組數組
name = new String(name.getBytes("ISO-8859-1"),"GB2312");
// 輸出結果
System.out.println(rs.getString("sno") + "\t" + name); } rs.close(); conn.close(); } catch(ClassNotFoundException e) { System.out.println("Sorry,can`t find the Driver!"); e.printStackTrace(); } catch(SQLException e) { e.printStackTrace(); } catch(Exception e) { e.printStackTrace(); } } }
接下來我們運行一下看下效果:
D:\testjdbc>javac JDBCTest.java
D:\testjdbc>java JDBCTest
Succeeded connecting to the Database!
2. javaweb資料庫操作
//該方法返回參數為ArrayList對象
public ArrayList executeQuery(String sqlString) {
//定義一個ArrayList對象的變數listSet
ArrayList listSet = new ArrayList();
//獲取資料庫列名
ResultSetMetaData rsmd = null;
//定義一個Map對象rsTree
Map rsTree;
//返回集的列數
int numberOfColumns;
try {
//連接資料庫
conn = startConn(conn);
//實例化Statement對象
st = conn.createStatement();
//通過SQL查詢出來的結果集【這里上面應該是少定義了一個結果集】
rs = st.executeQuery(sqlString);
//取資料庫的列名
rsmd = rs.getMetaData();
//獲得列數
numberOfColumns = rsmd.getColumnCount();
//去除結果集中的數據while遍歷【rs.next():代表rs中有下一個有數據,就執行while中的方法】
while(rs.next()){
//定義rsTree為一個固定長度的HashMap,長度為numberOfColumns
rsTree = new HashMap(numberOfColumns);
//循環,將查詢出來的列明和對應的數據放到Map對象rsTree中
for(int i = 1;i <= numberOfColumns;i++){
//【rsmd.getColumnName(i):獲取查詢結果的列名】【rs.getObject(i):獲取結果集中對應的數據】
rsTree.put(rsmd.getColumnName(i), rs.getObject(i));
}
//將Map對象rsTree放到listSet對象中
listSet.add(rsTree);
}
}catch (SQLException e) {
//當出現SQL異常時,輸出以下內容
System.out.println("查詢資料庫數據時發生錯誤!");
}finally{
//不管執行操作如何,始終關閉資料庫連接
closeConn(conn, st, rs);
}
//返回ArrayList對象listSet
return listSet;
}
3. JAVA web 與資料庫的連接到底是怎樣連的啊
JAVA Web開發中與資料庫的連接操作,配置:
1、新建資料庫。
新建登錄角色,在新建資料庫的時候把資料庫的所有權交給你新建的角色。用用戶和密碼控制資料庫。保證資料庫的安全。
2、編寫context.xml文件 Xml文件的目的是封裝用戶和密碼,也是封裝的一種,方便操作。
以下為context.xml文件樣例:
<?xml version="1.0" encoding="utf-8"?>
<Context reloadable = "true">
<Resource
name="jdbc/sampleHS"
type="javax.sql.DataSource"
maxActive="14"
maxIdle="10"
username="hstaoshu"
maxWait="5000"
driverClassName="org.postgresql.Driver"
password="hstaoshu"
url="jdbc:postgresql://localhost:5432/hstaoshu"/>
</Context>
詳細說明:
name="jdbc/sampleHS"裡面的ssampHS是可改名稱,建議根據需要自己命名;
username="hstaoshu"
password="hstaoshu"此兩項為你新建的資料庫登錄角色用戶名和密碼信息,只有匹配 了才能訪問。這里簡單為了表示,把用戶名和密碼弄成了跟資料庫名字一樣。其實這是很不安全的。
url="jdbc:postgresql://localhost:5432/hstaoshu"/>
這是連接資料庫的URl,就像訪問網站的地址一樣。沒有這個是無法訪問資料庫的。localhost:5432表示本地埠。一般不需要改動,如果你在配置資料庫的時候改動過埠,那麼你需要把它改回來。/hstaoshu是你的資料庫名稱。
其他選項請勿擅自改動。
3、編寫DAO類。
DAO類的作用是與數據連接後,對資料庫的一些操作的封裝。封裝的作用。為了更好的數據管理。
DAO是真正如何使用資料庫的關鍵步驟,前兩步只是部署和配置。
private static InitialContext context = null;
private DataSource dataSource = null;
//一般把跟資料庫的連接放在DAO類的構造函數里,只要被實例化,就能和資料庫連接。
public BookDAO() {
try {
if (context == null) {
context = new InitialContext();
}
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/sampleHS");
// 連接資料庫,前面在context.xml文件配置里的URl
} catch (NamingException e2) {
e2.printStackTrace();
}
}
public Connection getConnection() {
Connection conn = null;
try {
conn = dataSource.getConnection();// 獲得數據源的連接對象
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
做完上面的三步操作,開發環境已經完全和資料庫連接OK,可以開始資料庫的操作了。一般來說,對資料庫的操作語句都是提前封裝好的。這樣修改起來會對下面的代碼影響降到最小。
如下:
// ------------------資料庫操作語句代碼封裝------------------
/* 查看所有圖書 */
private static final String SELECT_ALL_SQL = "SELECT * FROM book";
那麼在使用的時候只要直接調用:
pstmt = conn.prepareStatement(SELECT_ALL_SQL);
4. java web中如何用ajax技術來檢驗注冊的用戶名資料庫中是否存在的實例求大神賜教!!!!
<script>
$(document).ready(function(){
//為inputForm注冊validate函數
$("#inputForm").validate({
rules:{
username:{
remote:"${ctx}/user/user!checkUser.action"
}
},
messages:{
username:{
remote:"用戶名已存在"
}
}
});
});
</script>
用jquery.validate實現。其中,inputForm是你form表單的id,username是用戶名輸入框的name屬性,remote後邊是action的鏈接,checkUser返回true或是false(當然得是json格式的)
5. java web與資料庫相連,具體怎麼做
1.首先要移動mysql-connector-java-5.1.44-bin.jar到tomactde的lib目錄下(我的目錄是這樣:F: omcatapache-tomcat-7.0.63lib)這是一個連接資料庫要用到包,一般在下載mysql的時候選擇配置會下載,然後移動到tomact的lib下;
拓展資料:
Java Web,是用Java技術來解決相關web互聯網領域的技術總和。web包括:web伺服器和web客戶端兩部分。Java在客戶端的應用有java applet,不過使用得很少,Java在伺服器端的應用非常的豐富,比如Servlet,JSP和第三方框架等等。Java技術對Web領域的發展注入了強大的動力。
Java的Web框架雖然各不相同,但基本也都是遵循特定的路數的:使用Servlet或者Filter攔截請求,使用MVC的思想設計架構,使用約定,XML或 Annotation實現配置,運用Java面向對象的特點,面向對象實現請求和響應的流程,支持Jsp,Freemarker,Velocity等視圖。
6. java web 項目啟動時載入資料庫的數據到緩存中,如何實現求思路和實例。謝謝高峰相送
可以使用servlet的init方法訪問資料庫載入數據到java集合中,java集合相當於一塊緩存,適用於一般的數據。
7. 在java web中怎樣將數據存儲在資料庫中
Java可以使用JDBC對資料庫進行讀寫。JDBC訪問一般分為如下流程:
1、載入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類中。
2、提供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:字元編碼方式。
3、創建資料庫的連接
?要連接資料庫,需要向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() ;
}
4、創建一個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(? , ?)}") ;
5、執行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) ;
6、處理結果
兩種情況:
1、執行更新返回的是本次操作影響到的記錄數。
2、執行查詢返回的結果是一個ResultSet對象。
ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些行中數據的訪問。
使用結果集(ResultSet)對象的訪問方法獲取數據:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1); // 此方法比較高效(列是從左到右編號的,並且從列1開始)
}
7、關閉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() ;
}
}
8. 誰有java web中對資料庫的增刪改查的完整例子嗎,
文件太大 上傳不了。。。。我給你看下部分代碼public class CommentServlet extends HttpServlet {private static final long serialVersionUID = -2540110714710583202L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//獲取從放入request中的method的值request.setCharacterEncoding("UTF-8");String method = request.getParameter("method");if (method == null) {method = "";}//判斷method的值調用不同方法if (method.equals("add")) {add(request, response);} else if (method.equals("admin")) {admin(request, response);} else if (method.equals("delete")) {delete(request, response);} else {admin(request, response);}}public void add(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String name = request.getParameter("name");String content = request.getParameter("content");String blog_id = request.getParameter("blog_id");if (name == null | name.equals("")) {name = "匿名";}String sql = "insert into comment (username,content,blog_id,createdtime) values(?,?,?,now())";String params[] = { name, content, blog_id };QueryRunner qr = DbHelper.getQueryRunner();try {qr.update(sql, params);} catch (SQLException e) {e.printStackTrace();}response.sendRedirect("/blog/servlet/HomeServlet?method=display&id="+ blog_id);}public void admin(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {HttpSession session = request.getSession();User user = (User) session.getAttribute("user");if (user == null) {response.sendRedirect("/blog");} else {String sql = "select c.id,username,c.content,c.createdtime,title from comment c,blog b where blog_id=b.id order by c.id desc";QueryRunner qr = DbHelper.getQueryRunner();List list = null;try {list = (List) qr.query(sql, new BeanListHandler(Comment.class));} catch (SQLException e) {e.printStackTrace();}request.setAttribute("list", list);request.getRequestDispatcher("/admin/adminCommentList.jsp").forward(request, response);}}public void delete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {HttpSession session = request.getSession();User user = (User) session.getAttribute("user");if (user == null) {response.sendRedirect("/blog");} else {String id = request.getParameter("id");String ctid = request.getParameter("ctid");String id2 = (String) request.getParameter("id2");System.out.println(id2);if (ctid != null) {id = ctid;}String sql = "delete from comment where id=" + id;QueryRunner qr = DbHelper.getQueryRunner();try {qr.update(sql);} catch (SQLException e) {e.printStackTrace();}if (ctid == null) {response.sendRedirect("CommentServlet?method=admin");} else {request.setAttribute("id2", id2);request.getRequestDispatcher("HomeServlet?method=display").forward(request, response);}}}}下面這個類是連接資料庫的 package cn.com.jobe.blog; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.apache.commons.dbutils.QueryRunner; public class DbHelper { public static QueryRunner getQueryRunner() { // 數據源對象可以理解為連接池的管理者,通過他可以獲取資料庫的鏈接 DataSource ds = null; Context context; try { // 通過在context.xml文件,設定的數據源對象的名字,獲取數據源對象 context = new InitialContext(); ds = (DataSource) context.lookup("java:comp/env/jdbc/mysqlds"); } catch (NamingException e) { System.out.println("獲取數據源失敗!"); } QueryRunner qr = new QueryRunner(ds); return qr; } }
9. 關於javaweb獲取資料庫實例地址的幾個問題,自學的,求解,謝謝
1、實例地址對不同的資料庫類型(比如mysql/oracle/sqlite之類有各自不同的固定寫法),其中變動參數取決於資料庫本身,比如資料庫地址、實例名和用戶名等等
2、具體含義建議你搜索下比如jdbc oracle這種,有詳細說明,以你上面為例
jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc:表示採用jdbc方式連接資料庫
oracle:表示連接的是oracle資料庫
thin:表示連接時採用thin模式(oracle中有兩種模式)
127.0.0.1是指資料庫在本機,埠為默認的1521
orcl是oracle實例名
3、你圖中只是幾個預定義的字元串,並未生成任何實例,真正的實例你要看這個類的其它部分。
4、實例對象是對你的代碼而言,資料庫中的實例在不同資料庫中含義不一樣。
10. 我用java做web開發,裡面有連接伺服器資料庫的代碼,,我想實現連接伺服器這段代碼可以實現伺服器
你是要切換資料庫嗎?如果是切換資料庫可以使用spring來實現動態數據源切換;
你可以在spring中配置多個資料庫伺服器的數據源,然後通過java代碼來控制動態注入不同數據源,來實現資料庫切換