TShopping

 找回密碼
 註冊
搜索
查看: 454|回復: 3

[教學] Java使用JDBC操作SQLite

[複製鏈接]
發表於 2014-5-7 19:56:04 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
SQLite是一個輕量級的資料庫系統,不需要安裝就可以使用,也可以十分容易的就內嵌於系統內,FireFox就內嵌SQLite,可以在FireFox上直接使用JavaScript來呼叫操作資料庫。
SQLite是由C語言撰寫而已,可以跨Linux及Windows等平台,在Java存取及操作上則可使用JDBC來連線SQLite。
在JDBC連線SQLite上,大概分成二種方式,一種是由Pure-Java來連結資料,另一種則是直接利用Java呼叫C語言撰寫的函式庫,不過在實測上直接呼叫C的函式庫的方式應該是比較快的,不過在無法找到合適C函式庫的平台則可使用Pure-Java版。
SQLiteJDBC目前查到這個版本是比較有在更新,而且在使用上跟一般的JDBC幾乎是一樣的,上手程式十分簡單。
SQLiteJDBC可以由這裡下載,以下範例是由3.5.7版本製作,提供建立Table、移除Table、查詢、新增、刪除及修改等範例。
  1. import java.sql.*;

  2. import org.sqlite.SQLiteConfig;
  3. import org.sqlite.SQLiteDataSource;
  4. public class hh extends JFrame {

  5.         private JPanel contentPane;

  6.         /**
  7.          * Launch the application.
  8.          */
  9.         static String SQL_NAME ;
  10.         private static final String MAIN_DATA_TABLE_NAME = "maindata";
  11.         //表的4個欄位
  12.     private static final String MAIN_DATA_Label = "label";  
  13.     private static final String MAIN_DATA_NAME = "package";
  14.     private static final String MAIN_DATA_Move = "move";
  15.     private static final String MAIN_DATA_ICON = "icon";  
  16.         public static void main(String[] args) throws SQLException {
  17.                
  18.                 hh test = new hh();
  19.                 Connection con = test.getConnection();
  20.                 //查詢顯示資料
  21.         test.selectAll(con);

  22.         }
  23.          public Connection getConnection() throws SQLException
  24.             {
  25.                
  26.                 SQLiteConfig config = new SQLiteConfig();
  27.                 // config.setReadOnly(true);   
  28.                 config.setSharedCache(true);
  29.                 config.enableRecursiveTriggers(true);
  30.          
  31.          
  32.                 SQLiteDataSource ds = new SQLiteDataSource(config);
  33.                 ds.setUrl("jdbc:sqlite:C:\\testDBinSD");
  34.                 return ds.getConnection();
  35.                 //ds.setServerName("sample.db");
  36.          
  37.          
  38.             }
  39.             //create Table
  40.          
  41.             public void createTable(Connection con )throws SQLException{
  42.                      String mainDataSQL = "CREATE TABLE IF NOT EXISTS "
  43.                                          + MAIN_DATA_TABLE_NAME
  44.                                          + "( "
  45.                                          + MAIN_DATA_Move + " TEXT, "
  46.                                          + MAIN_DATA_Label + " TEXT, "
  47.                                          +"id INTEGER PRIMARY KEY AUTOINCREMENT, "
  48.                                  + MAIN_DATA_NAME + " TEXT, "  
  49.                                  + MAIN_DATA_ICON + " TEXT);";
  50.                 Statement stat = null;
  51.                 stat = con.createStatement();
  52.                 stat.executeUpdate(mainDataSQL);
  53.          
  54.             }
  55.             //drop table
  56.             public void dropTable(Connection con)throws SQLException{
  57.                 String mainDataSQL = "drop table maindata ";
  58.                 Statement stat = null;
  59.                 stat = con.createStatement();
  60.                 stat.executeUpdate(mainDataSQL);
  61.             }
  62.          
  63.             //新增
  64.             public void insert(Connection con,int id,String move,String packages,String label,String icon)throws SQLException{
  65.                 String mainDataSQL = "insert into mainData (id,move,package,label,icon) values(?,?,?,?,?)";
  66.                 PreparedStatement pst = null;
  67.                 pst = con.prepareStatement(mainDataSQL);
  68.                 int idx = 1 ;
  69.                 pst.setInt(idx++, id);
  70.                 pst.setString(idx++, packages);
  71.                 pst.executeUpdate();
  72.          
  73.             }
  74.             //修改
  75.             public void update(Connection con,int id,String move,String packages,String label,String icon)throws SQLException{
  76.                 String mainDataSQL = "update maindata set move = "+move+",package = "+packages+",label = "+label+",icon = "+icon+" where id = "+id;
  77.                 PreparedStatement pst = null;
  78.                 pst = con.prepareStatement(mainDataSQL);
  79.                /* int idx = 1 ;
  80.                 pst.setString(idx++, packages );
  81.                 pst.setInt(idx++, id);*/
  82.                 pst.executeUpdate(mainDataSQL);
  83.             }
  84.             //刪除
  85.             public void delete(Connection con,int id)throws SQLException{
  86.                 String mainDataSQL = "delete from maindata where id = ?";
  87.                 PreparedStatement pst = null;
  88.                 pst = con.prepareStatement(mainDataSQL);
  89.                 int idx = 1 ;
  90.                 pst.setInt(idx++, id);
  91.                 pst.executeUpdate();
  92.             }
  93.         
  94.             public void selectAll(Connection con)throws SQLException{
  95.                 String mainDataSQL = "select * from maindata";
  96.                 Statement stat = null;
  97.                 ResultSet rs = null;
  98.                 stat = con.createStatement();
  99.                 rs = stat.executeQuery(mainDataSQL);
  100.                 while(rs.next())
  101.                 {
  102.                     System.out.println(rs.getInt("id")+"\t"+rs.getString("move")+"\t"+rs.getString("label")+"\t"+rs.getString("package")+"\t"+rs.getString("icon"));
  103.                 }
  104.             }
  105.         /**
  106.          * Create the frame.
  107.          */
  108.         public hh() {
  109.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  110.                 setBounds(100, 100, 450, 300);
  111.                 contentPane = new JPanel();
  112.                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  113.                 contentPane.setLayout(new BorderLayout(0, 0));
  114.                 setContentPane(contentPane);
  115.         }

  116. }
複製代碼
SQLite並沒有使用者登入的的機制,所以只需要告知要存取的資料庫檔案位置就可以使用了。jdbc:sqlite:C:\\testDBinSD其中testDBinSD就是檔案名稱,也可指定其路徑位置c:\testDBinSD。



 

臉書網友討論
發表於 2014-6-15 18:13:35 | 顯示全部樓層
不错!值得学习,楼主继续

版主招募中

發表於 2014-7-3 16:42:20 | 顯示全部樓層
好贴,双手赞成!











bjcars.net


發表於 2015-7-9 06:04:55 | 顯示全部樓層
顶!!!!!!!












人皇


您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-12 03:53 , Processed in 0.060563 second(s), 21 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表