欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android數(shù)據(jù)庫,android數(shù)據(jù)庫增刪改查

如何往android中添加數(shù)據(jù)庫

一、新建外部SQLite數(shù)據(jù)庫

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、網(wǎng)絡空間、營銷軟件、網(wǎng)站建設、仁化網(wǎng)站維護、網(wǎng)站推廣。

(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ù)導入到你新建的數(shù)據(jù)表中(主要目的是省的一個一個的錄入了)

二、在eclipse中新建一個android app工程,并在新建的工程文件夾點右鍵new-folder,在res文件夾下新建raw文件夾(如果有就不用新建了)

三、用鼠標將新建的SQLite數(shù)據(jù)庫文件contact.db拖動到新建工程的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ā)布出來

android怎么鏈接數(shù)據(jù)庫mysql

有點多請耐心看完。

希望能幫助你,還請及時采納謝謝。

一.前言

android連接數(shù)據(jù)庫的方式有兩種,第一種是通過連接服務器,再由服務器讀取數(shù)據(jù)庫來實現(xiàn)數(shù)據(jù)的增刪改查,這也是我們常用的方式。第二種方式是android直接連接數(shù)據(jù)庫,這種方式非常耗手機內(nèi)存,而且容易被反編譯造成安全隱患,所以在實際項目中不推薦使用。

二.準備工作

1.加載外部jar包

在Android工程中要使用jdbc的話,要導入jdbc的外部jar包,因為在Java的jdk中并沒有jdbc的api,我使用的jar包是mysql-connector-java-5.1.18-bin.jar包,網(wǎng)絡上有使用mysql-connector-java-5.1.18-bin.jar包的,自己去用的時候發(fā)現(xiàn)不兼容,所以下載了比較新版本的,jar包可以去官網(wǎng)下載,也可以去百度,有很多前人們上傳的。

2.導入jar包的方式

方式一:

可以在項目的build.gradle文件中直接添加如下語句導入

compile files('libs/mysql-connector-java-5.1.18-bin.jar')

方式二:下載jar包復制到項目的libs目錄下,然后右鍵復制過來的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之后,不允許在主線程中進行比較耗時的操作(連接數(shù)據(jù)庫就屬于比較耗時的操作),需要開一個新的線程來處理這種耗時的操作,沒新線程時,一直就是程序直接退出,開了一個新線程處理直接,就沒問題了。

當然,連接數(shù)據(jù)庫是需要網(wǎng)絡的,千萬別忘了添加訪問網(wǎng)絡權(quán)限:

uses-permission android:name=”android.permission.INTERNET”/

四.bug點

1.導入的jar包一定要正確

2.連接數(shù)據(jù)庫一定要開啟新線程

3.數(shù)據(jù)庫的IP一定要是可以ping通的,局域網(wǎng)地址手機是訪問不了的

4.數(shù)據(jù)庫所在的服務器是否開了防火墻,阻止了訪問

————————————————

版權(quán)聲明:本文為CSDN博主「shuaiyou_comon」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

原文鏈接:

如何進行Android數(shù)據(jù)庫操作

Android數(shù)據(jù)庫操作類實例

實體類:UserInfo.java

package my.db;

import java.io.Serializable;

import android.graphics.drawable.Drawable;

public class UserInfo implements Serializable {

public static final String ID = "_id";

public static final String USERID = "userId";

public static final String TOKEN = "token";

public static final String TOKENSECRET = "tokenSecret";

public static final String USERNAME = "userName";

public static final String USERICON = "userIcon";

private String id;

private String userId; // 用戶id

private String token;

private String tokenSecret;

private String userName;

private Drawable userIcon;

//getter and setter省略

}

SqliteHelper類:

package my.db;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.database.sqlite.SQLiteOpenHelper;

import android.util.Log;

public class SqliteHelper extends SQLiteOpenHelper{

//用來保存UserID、Access Token、Access Secret的表名

public static final String TB_NAME= "users";

public SqliteHelper(Context context, String name, CursorFactory factory, int version) {

super(context, name, factory, version);

}

//創(chuàng)建表

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL( "CREATE TABLE IF NOT EXISTS "+

TB_NAME+ "("+

UserInfo. ID+ " integer primary key,"+

UserInfo. USERID+ " varchar,"+

UserInfo. TOKEN+ " varchar,"+

UserInfo. TOKENSECRET+ " varchar,"+

UserInfo. USERNAME+ " varchar,"+

UserInfo. USERICON+ " blob"+

")"

);

Log. e("Database" ,"onCreate" );

}

//更新表

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL( "DROP TABLE IF EXISTS " + TB_NAME );

onCreate(db);

Log. e("Database" ,"onUpgrade" );

}

//更新列

public void updateColumn(SQLiteDatabase db, String oldColumn, String newColumn, String typeColumn){

try{

db.execSQL( "ALTER TABLE " +

TB_NAME + " CHANGE " +

oldColumn + " "+ newColumn +

" " + typeColumn

);

} catch(Exception e){

e.printStackTrace();

}

}

}

CRUD類DataHelper:

package my.db;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.util.ArrayList;

import java.util.List;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.graphics.Bitmap;

import android.graphics.drawable.Drawable;

import android.util.Log;

public class DataHelper {

// 數(shù)據(jù)庫名稱

private static String DB_NAME = "weibo.db";

// 數(shù)據(jù)庫版本

private static int DB_VERSION = 2;

private SQLiteDatabase db;

private SqliteHelper dbHelper;

public DataHelper(Context context) {

dbHelper = new SqliteHelper(context, DB_NAME, null, DB_VERSION );

db = dbHelper.getWritableDatabase();

}

public void Close() {

db.close();

dbHelper.close();

}

// 獲取users表中的UserID、Access Token、Access Secret的記錄

public ListUserInfo GetUserList(Boolean isSimple) {

ListUserInfo userList = new ArrayListUserInfo();

Cursor cursor = db.query(SqliteHelper. TB_NAME, null, null , null, null,

null, UserInfo. ID + " DESC");

cursor.moveToFirst();

while (!cursor.isAfterLast() (cursor.getString(1) != null )) {

UserInfo user = new UserInfo();

user.setId(cursor.getString(0));

user.setUserId(cursor.getString(1));

user.setToken(cursor.getString(2));

user.setTokenSecret(cursor.getString(3));

if (!isSimple) {

user.setUserName(cursor.getString(4));

ByteArrayInputStream stream = new ByteArrayInputStream(cursor.getBlob(5));

Drawable icon = Drawable.createFromStream(stream, "image");

user.setUserIcon(icon);

}

userList.add(user);

cursor.moveToNext();

}

cursor.close();

return userList;

}

// 判斷users表中的是否包含某個UserID的記錄

public Boolean HaveUserInfo(String UserId) {

Boolean b = false;

Cursor cursor = db.query(SqliteHelper. TB_NAME, null, UserInfo.USERID

+ "=?", new String[]{UserId}, null, null, null );

b = cursor.moveToFirst();

Log. e("HaveUserInfo", b.toString());

cursor.close();

return b;

}

// 更新users表的記錄,根據(jù)UserId更新用戶昵稱和用戶圖標

public int UpdateUserInfo(String userName, Bitmap userIcon, String UserId) {

ContentValues values = new ContentValues();

values.put(UserInfo. USERNAME, userName);

// BLOB類型

final ByteArrayOutputStream os = new ByteArrayOutputStream();

// 將Bitmap壓縮成PNG編碼,質(zhì)量為100%存儲

userIcon.compress(Bitmap.CompressFormat. PNG, 100, os);

// 構(gòu)造SQLite的Content對象,這里也可以使用raw

values.put(UserInfo. USERICON, os.toByteArray());

int id = db.update(SqliteHelper. TB_NAME, values, UserInfo.USERID + "=?" , new String[]{UserId});

Log. e("UpdateUserInfo2", id + "");

return id;

}

// 更新users表的記錄

public int UpdateUserInfo(UserInfo user) {

ContentValues values = new ContentValues();

values.put(UserInfo. USERID, user.getUserId());

values.put(UserInfo. TOKEN, user.getToken());

values.put(UserInfo. TOKENSECRET, user.getTokenSecret());

int id = db.update(SqliteHelper. TB_NAME, values, UserInfo.USERID + "="

+ user.getUserId(), null);

Log. e("UpdateUserInfo", id + "");

return id;

}

// 添加users表的記錄

public Long SaveUserInfo(UserInfo user) {

ContentValues values = new ContentValues();

values.put(UserInfo. USERID, user.getUserId());

values.put(UserInfo. TOKEN, user.getToken());

values.put(UserInfo. TOKENSECRET, user.getTokenSecret());

Long uid = db.insert(SqliteHelper. TB_NAME, UserInfo.ID, values);

Log. e("SaveUserInfo", uid + "");

return uid;

}

// 添加users表的記錄

public Long SaveUserInfo(UserInfo user, byte[] icon) {

ContentValues values = new ContentValues();

values.put(UserInfo. USERID, user.getUserId());

values.put(UserInfo. USERNAME, user.getUserName());

values.put(UserInfo. TOKEN, user.getToken());

values.put(UserInfo. TOKENSECRET, user.getTokenSecret());

if(icon!= null){

values.put(UserInfo. USERICON, icon);

}

Long uid = db.insert(SqliteHelper. TB_NAME, UserInfo.ID, values);

Log. e("SaveUserInfo", uid + "");

return uid;

}

// 刪除users表的記錄

public int DelUserInfo(String UserId) {

int id = db.delete(SqliteHelper. TB_NAME,

UserInfo. USERID + "=?", new String[]{UserId});

Log. e("DelUserInfo", id + "");

return id;

}

public static UserInfo getUserByName(String userName,ListUserInfo userList){

UserInfo userInfo = null;

int size = userList.size();

for( int i=0;isize;i++){

if(userName.equals(userList.get(i).getUserName())){

userInfo = userList.get(i);

break;

}

}

return userInfo;

}

}

Android一般采用什么數(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作為手機端的手機操作系統(tǒng),是無法直接操作大型的關(guān)系型或是no sql類型的數(shù)據(jù)庫的。

從你的應用描述中景點等信息都可以選擇存儲在sqlite中。

但是圖片這些信息還是建議你存儲到服務器上,以文件的形式存儲。

還有一種方式是在服務器中使用任何的關(guān)系型和非關(guān)系型數(shù)據(jù)庫存儲你的所有數(shù)據(jù),但是你的android應用需要通過api去訪問你的景點圖片信息。

android 如何連接數(shù)據(jù)庫

這種方式通常連接一個外部的數(shù)據(jù)庫,第一個參數(shù)就是數(shù)據(jù)庫文件,這個數(shù)據(jù)庫不是當前項目中生成的,通常放在項目的Assets目錄下,當然也可以在手機內(nèi),如上面參數(shù)那個目錄,前提是那個文件存在且你的程序有訪問權(quán)限。

另一種使用數(shù)據(jù)庫的方式是,自己創(chuàng)建數(shù)據(jù)庫并創(chuàng)建相應的數(shù)據(jù)庫表,參考下面的代碼:

public class DatabaseHelper extends SQLiteOpenHelper {

//構(gòu)造,調(diào)用父類構(gòu)造,數(shù)據(jù)庫名字,版本號(傳入更大的版本號可以讓數(shù)據(jù)庫升級,onUpgrade被調(diào)用)

public DatabaseHelper(Context context) {

super(context, DatabaseConstant.DATABASE_NAME, null, DatabaseConstant.DATABASE_VERSION);

}

//數(shù)據(jù)庫創(chuàng)建時調(diào)用,里面執(zhí)行表創(chuàng)建語句.

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(createVoucherTable());

}

//數(shù)據(jù)庫升級時調(diào)用,先刪除舊表,在調(diào)用onCreate創(chuàng)建表.

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("DROP TABLE IF EXISTS " + DatabaseConstant.TABLE_NAME);

onCreate(db);

}

//生成 創(chuàng)建表的SQL語句

private String createVoucherTable() {

StringBuffer sb = new StringBuffer();

sb.append(" CREATE TABLE ").append(DatabaseConstant.TABLE_NAME).append("( ").append(“ID”)

.append(" TEXT PRIMARY KEY, ")

.append(“USER_ID”).append(" INTEGER, ").append(“SMS_CONTENT”).append(" TEXT ) ");

return sb.toString();

}

} 繼承SQLiteOpenHelper并實現(xiàn)里面的方法.

之后:

//得到數(shù)據(jù)庫助手類

helper

=

new

DatabaseHelper(context);

//通過助手類,打開一個可讀寫的數(shù)據(jù)庫連接

SQLiteDatabase

database

=

helper.getReadableDatabase();

//查詢表中所有記錄

database.query(DatabaseConstant.TABLE_NAME,

null,

null,

null,

null,

null,

null);

android 數(shù)據(jù)庫存什么數(shù)據(jù)

輕量數(shù)據(jù)!輕量數(shù)據(jù)!輕量數(shù)據(jù)!切記

android數(shù)據(jù)庫是一個輕量級數(shù)據(jù)庫sqlite。我以前測試過,數(shù)據(jù)量大于3000條的時候查詢會有明顯延遲,甚至會崩潰。

所以,一般會存儲類似于用戶信息,簡單的log,版本信息。你可以用電腦連接android手機,然后用sqlite命令行工具訪問手機里的數(shù)據(jù)庫,看看主流app都存了什么。

當前標題:android數(shù)據(jù)庫,android數(shù)據(jù)庫增刪改查
鏈接URL:http://chinadenli.net/article21/dsgjhcd.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名品牌網(wǎng)站制作網(wǎng)站內(nèi)鏈關(guān)鍵詞優(yōu)化定制網(wǎng)站企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設