十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
1,進(jìn)入到控制臺中,輸入adb shell,進(jìn)入到命令模式的環(huán)境中
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)臺州免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
2,輸入:cd /data/data/
3, 選擇你所在的數(shù)據(jù)庫文件,比如我的com.android.homework, 輸入命令:cd com.android.homework
4, 可以使用ls -l 命令查看當(dāng)前目錄中的文件
5,輸入: cd databases 進(jìn)入到數(shù)據(jù)庫文件中
6, ls -l 顯示你數(shù)據(jù)庫中你建立的數(shù)據(jù)庫
7, sqlite3 info.db 進(jìn)入到你選擇的數(shù)據(jù)庫中
8, .tables :查看你建的表
9, select * from table_name;s 可以查看整個(gè)表的信息
10, 使用其他的SQL語句可以進(jìn)一步對表進(jìn)行操作,注意SQL語句必須用分號(;)結(jié)尾
一、新建外部SQLite數(shù)據(jù)庫
(1)下載并安裝 SQLite可視化管理工具(SQLite Expert Pro) v3.4.17 破解版
(2)將你手頭上的數(shù)據(jù)放到EXCEL表格中,保存為CSV格式的數(shù)據(jù)
(3)在此工具中按照你現(xiàn)有的數(shù)據(jù)格式新建數(shù)據(jù)庫和表,如數(shù)據(jù)庫為:contact.db,表為employee
(4)通過此工具菜單欄中Import/Export下的Import text file(CSV,TSC)功能,將你現(xiàn)有的CSV數(shù)據(jù)導(dǎo)入到你新建的數(shù)據(jù)表中(主要目的是省的一個(gè)一個(gè)的錄入了)
二、在eclipse中新建一個(gè)android app工程,并在新建的工程文件夾點(diǎn)右鍵new-folder,在res文件夾下新建raw文件夾(如果有就不用新建了)
三、用鼠標(biāo)將新建的SQLite數(shù)據(jù)庫文件contact.db拖動(dòng)到新建工程的res下的raw文件下,出現(xiàn)提示,選擇copy
四、程序代碼
private static final String DATABASE_PATH = "/data/data/你的主程序包路徑(如:com.szair.contact)/databases";
private static final int DATABASE_VERSION = 0;
private static final String DATABASE_NAME = "contact.db";
private static String outFileName = DATABASE_PATH + "/" + DATABASE_NAME;
try {
buildDatabase();//見下
} catch (Exception e) {
e.printStackTrace();
}
//SQLiteDatabase對象
SQLiteDatabase db=SQLiteDatabase.openDatabase(outFileName, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS);
String t="SELECT 字段名1,字段名2 FROM employee WHERE **** ORDER BY ***";
Cursor c =db.rawQuery(t, null);
if(c.moveToFirst()){
for(int i=0;i
{
String ziduan1=c.getString(0);//字段1的數(shù)據(jù)
String ziduan2=c.getString(1);//字段1的數(shù)據(jù)
}
}
------------------------------------------------
//前面用到的buildDatabase方法
private void buildDatabase() throws Exception{
InputStream myInput = getResources().openRawResource(R.raw.sz_contact);
File file = new File(outFileName);
File dir = new File(DATABASE_PATH);
if (!dir.exists()) {
if (!dir.mkdir()) {
throw new Exception("創(chuàng)建失敗");
}
}
if (!file.exists()) {
try {
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))0){
myOutput.write(buffer, 0, length);
}
myOutput.close();
myInput.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
五、程序發(fā)布
按照以上方式,可以將外部建的SQLite數(shù)據(jù)庫成功的發(fā)布出來
輕量數(shù)據(jù)!輕量數(shù)據(jù)!輕量數(shù)據(jù)!切記
android數(shù)據(jù)庫是一個(gè)輕量級數(shù)據(jù)庫sqlite。我以前測試過,數(shù)據(jù)量大于3000條的時(shí)候查詢會有明顯延遲,甚至?xí)罎ⅰ?/p>
所以,一般會存儲類似于用戶信息,簡單的log,版本信息。你可以用電腦連接android手機(jī),然后用sqlite命令行工具訪問手機(jī)里的數(shù)據(jù)庫,看看主流app都存了什么。
有點(diǎn)多請耐心看完。
希望能幫助你,還請及時(shí)采納謝謝。
一.前言
android連接數(shù)據(jù)庫的方式有兩種,第一種是通過連接服務(wù)器,再由服務(wù)器讀取數(shù)據(jù)庫來實(shí)現(xiàn)數(shù)據(jù)的增刪改查,這也是我們常用的方式。第二種方式是android直接連接數(shù)據(jù)庫,這種方式非常耗手機(jī)內(nèi)存,而且容易被反編譯造成安全隱患,所以在實(shí)際項(xiàng)目中不推薦使用。
二.準(zhǔn)備工作
1.加載外部jar包
在Android工程中要使用jdbc的話,要導(dǎo)入jdbc的外部jar包,因?yàn)樵贘ava的jdk中并沒有jdbc的api,我使用的jar包是mysql-connector-java-5.1.18-bin.jar包,網(wǎng)絡(luò)上有使用mysql-connector-java-5.1.18-bin.jar包的,自己去用的時(shí)候發(fā)現(xiàn)不兼容,所以下載了比較新版本的,jar包可以去官網(wǎng)下載,也可以去百度,有很多前人們上傳的。
2.導(dǎo)入jar包的方式
方式一:
可以在項(xiàng)目的build.gradle文件中直接添加如下語句導(dǎo)入
compile files('libs/mysql-connector-java-5.1.18-bin.jar')
方式二:下載jar包復(fù)制到項(xiàng)目的libs目錄下,然后右鍵復(fù)制過來的jar包Add as libs
三.建立數(shù)據(jù)庫連接
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jdbc);
new Thread(runnable).start();
}
Handler myHandler=new Handler(){
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
Bundle data=new Bundle();
data=msg.getData();
//System.out.println("id:"+data.get("id").toString()); //輸出第n行,列名為“id”的值
Log.e("TAG","id:"+data.get("id").toString());
TextView tv= (TextView) findViewById(R.id.jdbc);
//System.out.println("content:"+data.get("content").toString());
}
};
Runnable runnable=new Runnable() {
private Connection con = null;
@Override
public void run() {
// TODO Auto-generated method stub
try {
Class.forName("com.mysql.jdbc.Driver");
//引用代碼此處需要修改,address為數(shù)據(jù)IP,Port為端口號,DBName為數(shù)據(jù)名稱,UserName為數(shù)據(jù)庫登錄賬戶,Password為數(shù)據(jù)庫登錄密碼
con =
//DriverManager.getConnection("jdbc:mysql://192.168.1.202:3306/b2b", "root", "");
DriverManager.getConnection("jdbc:mysql://",
UserName,Password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
testConnection(con); //測試數(shù)據(jù)庫連接
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void testConnection(Connection con1) throws java.sql.SQLException {
try {
String sql = "select * from ecs_users"; //查詢表名為“oner_alarm”的所有內(nèi)容
Statement stmt = con1.createStatement(); //創(chuàng)建Statement
ResultSet rs = stmt.executeQuery(sql); //ResultSet類似Cursor
//codeResultSet/code最初指向第一行
Bundle bundle=new Bundle();
while (rs.next()) {
bundle.clear();
bundle.putString("id",rs.getString("userid"));
//bundle.putString("content",rs.getString("content"));
Message msg=new Message();
msg.setData(bundle);
myHandler.sendMessage(msg);
}
rs.close();
stmt.close();
} catch (SQLException e) {
} finally {
if (con1 != null)
try {
con1.close();
} catch (SQLException e) {}
}
}
};
注意:
在Android4.0之后,不允許在主線程中進(jìn)行比較耗時(shí)的操作(連接數(shù)據(jù)庫就屬于比較耗時(shí)的操作),需要開一個(gè)新的線程來處理這種耗時(shí)的操作,沒新線程時(shí),一直就是程序直接退出,開了一個(gè)新線程處理直接,就沒問題了。
當(dāng)然,連接數(shù)據(jù)庫是需要網(wǎng)絡(luò)的,千萬別忘了添加訪問網(wǎng)絡(luò)權(quán)限:
uses-permission android:name=”android.permission.INTERNET”/
四.bug點(diǎn)
1.導(dǎo)入的jar包一定要正確
2.連接數(shù)據(jù)庫一定要開啟新線程
3.數(shù)據(jù)庫的IP一定要是可以ping通的,局域網(wǎng)地址手機(jī)是訪問不了的
4.數(shù)據(jù)庫所在的服務(wù)器是否開了防火墻,阻止了訪問
————————————————
版權(quán)聲明:本文為CSDN博主「shuaiyou_comon」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:
Android 不自動(dòng)提供數(shù)據(jù)庫。在 Android 應(yīng)用程序中使用 SQLite,必須自己創(chuàng)建數(shù)據(jù)庫,然后創(chuàng)建表、索引,填充數(shù)據(jù)。Android 提供了 SQLiteOpenHelper 幫助你創(chuàng)建一個(gè)數(shù)據(jù)庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創(chuàng)建數(shù)據(jù)庫。SQLiteOpenHelper 類根據(jù)開發(fā)應(yīng)用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實(shí)現(xiàn)三個(gè)方法:
構(gòu)造函數(shù),調(diào)用父類 SQLiteOpenHelper 的構(gòu)造函數(shù)
onCreate()方法;// TODO 創(chuàng)建數(shù)據(jù)庫后,對數(shù)據(jù)庫的操作
onUpgrage()方法。// TODO 更改數(shù)據(jù)庫版本的操作
當(dāng)你完成了對數(shù)據(jù)庫的操作(例如你的 Activity 已經(jīng)關(guān)閉),需要調(diào)用 SQLiteDatabase 的 Close() 方法來釋放掉數(shù)據(jù)庫連接。
Android一般采用sqlite數(shù)據(jù)庫作為數(shù)據(jù)存儲方案。
通常的數(shù)據(jù)庫有關(guān)系型數(shù)據(jù)如:ms
ql
,mysql,oracle等,非關(guān)系型nosql數(shù)據(jù)庫
如mongodb,redis
android作為手機(jī)端的手機(jī)操作系統(tǒng),是無法直接操作大型的關(guān)系型或是no
sql類型的數(shù)據(jù)庫的。
從你的應(yīng)用描述中景點(diǎn)等信息都可以選擇存儲在sqlite中。
但是圖片這些信息還是建議你存儲到服務(wù)器上,以文件的形式存儲。
還有一種方式是在服務(wù)器中使用任何的關(guān)系型和非關(guān)系型數(shù)據(jù)庫存儲你的所有數(shù)據(jù),但是你的android應(yīng)用需要通過api去訪問你的景點(diǎn)圖片信息。