引言
最后一天,公司就兩個人,也不知道弄點什么,就在網上找了Sqlite的文檔,看了看,這里也是現學現賣,給自己找點事做,感覺時間過得還是比較快的,不然焦急等待,滋味不好受啊。
SQLite簡介
SQLite,是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數據庫管理系統來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生於2000年5月。 至今已經有13個年頭,SQLite也迎來了一個版本 SQLite 3已經發布。(百度百科)
SQLite使用
跟使用sqlhelper一樣封裝sqlitehelper,通過下面的代碼你會發現他們是非常的相似的。
1 public class SQLiteHelper 2 { 3 private static readonly string databaseName = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["databaseName"]; 4 /// <summary> 5 /// 創建數據庫 6 /// </summary> 7 /// <param name="databaseName">數據庫文件路徑</param> 8 public static void CreateDataBase() 9 { 10 if (!File.Exists(databaseName)) 11 { 12 SQLiteConnection.CreateFile(databaseName); 13 } 14 } 15 /// <summary> 16 /// 獲得連接對象 17 /// </summary> 18 /// <returns></returns> 19 public static SQLiteConnection GetSQLiteConnection() 20 { 21 #region 方法一 22 SQLiteConnectionStringBuilder connStr = new SQLiteConnectionStringBuilder(); 23 connStr.DataSource = databaseName; 24 connStr.Password = "123456"; 25 connStr.Pooling = true; 26 return new SQLiteConnection(connStr.ToString()); 27 #endregion 28 #region 方法二 29 //return new SQLiteConnection(string.Format("Data Source={0};password=123456", databaseName)); 30 #endregion 31 } 32 /// <summary> 33 /// 匹配參數 34 /// </summary> 35 /// <param name="cmd"></param> 36 /// <param name="conn"></param> 37 /// <param name="cmdText"></param> 38 /// <param name="p"></param> 39 private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params object[] p) 40 { 41 if (conn.State == System.Data.ConnectionState.Closed) 42 { 43 conn.Open(); 44 } 45 cmd.Parameters.Clear(); 46 cmd.Connection = conn; 47 cmd.CommandText = cmdText; 48 cmd.CommandType = System.Data.CommandType.Text; 49 cmd.CommandTimeout = 30; 50 if (p != null) 51 { 52 foreach (object item in p) 53 { 54 cmd.Parameters.AddWithValue(string.Empty, item); 55 } 56 } 57 } 58 /// <summary> 59 /// 返回DataSet 60 /// </summary> 61 /// <param name="cmdText"></param> 62 /// <param name="p"></param> 63 /// <returns></returns> 64 public static DataSet ExecuteDataset(string cmdText, params object[] p) 65 { 66 DataSet ds = new DataSet(); 67 SQLiteCommand cmd = new SQLiteCommand(); 68 using (SQLiteConnection conn = GetSQLiteConnection()) 69 { 70 PrepareCommand(cmd, conn, cmdText, p); 71 SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd); 72 sda.Fill(ds); 73 } 74 return ds; 75 } 76 /// <summary> 77 /// 返回第一行 78 /// </summary> 79 /// <param name="cmdText"></param> 80 /// <param name="p"></param> 81 /// <returns></returns> 82 public static DataRow ExecuteDataRow(string cmdText, params object[] p) 83 { 84 DataSet ds = ExecuteDataset(cmdText, p); 85 if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) 86 { 87 return ds.Tables[0].Rows[0]; 88 } 89 else 90 { 91 return null; 92 } 93 } 94 /// <summary> 95 /// 執行非查詢操作 返回受影響的行數 96 /// </summary> 97 /// <param name="cmdText"></param> 98 /// <param name="p"></param> 99 /// <returns></returns> 100 public static int ExecuteNonQuery(string cmdText, params object[] p) 101 { 102 SQLiteCommand cmd = new SQLiteCommand(); 103 using (SQLiteConnection conn = GetSQLiteConnection()) 104 { 105 PrepareCommand(cmd, conn, cmdText, p); 106 return cmd.ExecuteNonQuery(); 107 } 108 } 109 /// <summary> 110 /// 返回SQLiteDataReader 111 /// </summary> 112 /// <param name="cmdText"></param> 113 /// <param name="p"></param> 114 /// <returns></returns> 115 public static SQLiteDataReader ExecuteReader(string cmdText, params object[] p) 116 { 117 SQLiteConnection conn = GetSQLiteConnection(); 118 SQLiteCommand cmd = new SQLiteCommand(); 119 try 120 { 121 PrepareCommand(cmd, conn, cmdText, p); 122 SQLiteDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 123 return reader; 124 } 125 catch (Exception) 126 { 127 conn.Close(); 128 throw; 129 } 130 } 131 /// <summary> 132 /// 返回結果集的首行首列 133 /// </summary> 134 /// <param name="cmdText"></param> 135 /// <param name="p"></param> 136 /// <returns></returns> 137 public static object ExecuteScalar(string cmdText, params object[] p) 138 { 139 SQLiteCommand cmd = new SQLiteCommand(); 140 using (SQLiteConnection conn = GetSQLiteConnection()) 141 { 142 PrepareCommand(cmd, conn, cmdText, p); 143 return cmd.ExecuteScalar(); 144 } 145 } 146 /// <summary> 147 /// 分頁獲取DataSet 148 /// </summary> 149 /// <param name="recordCount"></param> 150 /// <param name="pageIndex"></param> 151 /// <param name="pageSize"></param> 152 /// <param name="cmdText"></param> 153 /// <param name="countText"></param> 154 /// <param name="p"></param> 155 /// <returns></returns> 156 public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, params object[] p) 157 { 158 if (recordCount < 0) 159 recordCount = int.Parse(ExecuteScalar(countText, p).ToString()); 160 DataSet ds = new DataSet(); 161 SQLiteCommand command = new SQLiteCommand(); 162 using (SQLiteConnection connection = GetSQLiteConnection()) 163 { 164 PrepareCommand(command, connection, cmdText, p); 165 SQLiteDataAdapter da = new SQLiteDataAdapter(command); 166 da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result"); 167 } 168 return ds; 169 } 170 }
SQLite創建數據表
1 try 2 { 3 //創建表 4 SQLiteHelper.ExecuteNonQuery("create table users(id varchar(32),userName varchar(20),userPwd varchar(20))"); 5 } 6 catch (Exception) 7 { 8 9 throw; 10 }
SQLite添加數據
1 //參數化方式 2 int r = SQLiteHelper.ExecuteNonQuery("insert into users values(?,?,?)", new string[] { Guid.NewGuid().ToString(), name, pwd }); 3 //拼接方式 4 //int result = SQLiteHelper.ExecuteNonQuery("insert into users values('" + Guid.NewGuid().ToString() + "','" + name + "','" + pwd + "')"); 5 if (r > 0) 6 { 7 return "1"; 8 } 9 else 10 { 11 return "0"; 12 }
Sqlite刪除數據
1 protected void linkDelete_Click(object sender, EventArgs e) 2 { 3 LinkButton link = sender as LinkButton; 4 string id = link.CommandArgument; 5 int result = SQLiteHelper.ExecuteNonQuery("delete from users where id=?", new string[] { id }); 6 if (result > 0) 7 { 8 Response.Write("<script>alert('刪除成功');</script>"); 9 rptUsers.DataSource = SQLiteHelper.ExecuteDataset("select * from users"); 10 rptUsers.DataBind(); 11 } 12 }
SQLite修改數據
1 SQLiteHelper.ExecuteNonQuery("update users set userName=? where id=?", new string[] { "admin", "14732d6f-3cf5-4cad-8f75-542d9d6fce17" });
SQLite查詢數據
1 SQLiteHelper.ExecuteDataset("select * from users");
SQLite的數據類型
首先你會接觸到一個讓你驚訝的名詞: Typelessness(無類型). 對! SQLite是無類型的. 這意味着你可以保存任何類型的數據到你所想要保存的任何表的任何列中, 無論這列聲明的數據類型是什么(只有在一種情況下不是, 稍后解釋). 對於SQLite來說對字段不指定類型是完全有效的. 如:
Create Table ex1(a, b, c);
誠然SQLite允許忽略數據類型, 但是仍然建議在你的Create Table語句中指定數據類型. 因為數據類型對於你和其他的程序員交流, 或者你准備換掉你的數據庫引擎時能起到一個提示或幫助的作用. SQLite支持常見的數據類型, 如:
CREATE TABLE ex2
a VARCHAR(10),
b NVARCHAR(15),
c TEXT,
d INTEGER,
e FLOAT,
f BOOLEAN,
g CLOB,
h BLOB,
i TIMESTAMP,
j NUMERIC(10,5)
k VARYING CHARACTER (24),
l NATIONAL VARYING CHARACTER(16)
前面提到在某種情況下, SQLite的字段並不是無類型的. 即在字段類型為”Integer Primary Key”時.
DEMO下載猛戳這里:鏈接:http://pan.baidu.com/s/1eQ1LWgq 密碼:txeo
總結
總體來說sqlite還是比較容易上手的,看了一上午的文檔,然后做了一個簡單的demo,感覺跟sqlserver語法很相似。
晚上就要回家了,祝大家,馬年,馬到成功,心想事成.....