如何在不同的 android 活动中使用 Java.sql.Connection?

Posted

技术标签:

【中文标题】如何在不同的 android 活动中使用 Java.sql.Connection?【英文标题】:How can i use Java.sql.Connection in a different android activity? 【发布时间】:2015-10-14 09:55:36 【问题描述】:

我正在尝试创建一个小的 android 应用程序。 我的问题是:在第一个活动中创建到我的数据库的 JDBC 连接后,如何在其他活动中使用相同的连接进行查询? 我知道如何使用语句进行查询,但我可以通过主活动的连接以便在应用程序的所有其他活动中只使用第一个连接吗?

我的数据库是 IBM 的 AS400,我只能通过 JDBC(在 Android 平台上)访问它。我知道使用 Web 服务很简单,但公司希望以这种方式制作一切。

对不起我的英语,我是意大利人!

【问题讨论】:

Connection 是一个普通的 Java 对象,所以你可以传递它,例如使用Intent.putExtra() 我试过没有好的结果。我在网上搜索了一整天! 在这种情况下,您可能希望展示您的代码、您得到的结果(解释为什么它们不是“好”)以及您想要的结果。 【参考方案1】:

通常同时在多个组件中使用您的数据库不是问题。如果您使用 DB 类的通用模式来封装标准 DBhelper extends SQLiteOpenHelper - 您可以在许多活动中实例化您的 DB 类,它将在线程安全模式下使用。

public class DB 
    private static final String TAG = "DB";
    public static final int SCHEMA_VERSION = 7;

    final DBhelper mDBhelper;
    public SQLiteDatabase mDB;

    public DB ( Context context ) 
        mDBhelper = new DBhelper(context);
        // open the DB for read and write
        mDB = mDBhelper.getWritableDatabase();
    

    public synchronized long insertSite ( objSite s ) 
        ...
    
    ...

    private class DBhelper
              extends SQLiteOpenHelper 

        public DBhelper ( Context context ) 
            super(context, C.DB_NAME, null, SCHEMA_VERSION);
        

        @Override
        public void onCreate ( SQLiteDatabase db ) 
            ...
        

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
            Log.d(TAG, "entering onUpgrade(): oldVersion="+oldVersion+", newVersion="+newVersion);
            ...
        
        ...
    

照常使用

public class MainActivity extends Activity 
    DB eventsDB;

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        eventsDB = new DB(this);
        ...
        eventsDB.insertSite(objectSite);
    
    ...

【讨论】:

我不能使用这个例子,因为我的数据库是 IBM 的 AS400,我只能通过 JDBC(在 Android 平台中)访问它。我知道使用 Web 服务很简单,但公司希望以这种方式制作一切。谢谢你的回答! Khm... 为什么你之前隐藏了这个重要的细节? ;-)【参考方案2】:

在 Android 中,您通常使用 SQLite 来持久化数据。试试这个tutorial。

如果你有一个数据库服务器并且你想访问一个 android 设备,我建议你用一个中间服务器包装数据库访问,该服务器通过 Web 服务 (REST) 公开数据。

您没有指定数据库访问是在 Internet 还是 Intranet 上下文中,所以我认为它是在混合上下文中。

【讨论】:

我有一个 AS400 数据库 (IBM),在 Android 中使用它的最简单方法是使用 JDBC(我认为)。数据库很大,我在一家公司工作。谢谢你的回答。 不要将 Android 设备用作客户端 jdbc。我建议您使用中间服务器并将 android 设备连接到数据库 throws Web 服务 (REST)。 是的@xcesco,但我无法创建 Web 服务的服务器端。这对我来说是第一次。你能帮助我吗?有一项在线服务,我可以在其中放置服务器端代码?谢谢! 你可以试试谷歌云平台 (console.cloud.google.com/…)

以上是关于如何在不同的 android 活动中使用 Java.sql.Connection?的主要内容,如果未能解决你的问题,请参考以下文章

Android在C ++ JNI代码中从另一个活动类调用Java函数

如何使用google plus的accessToken从不同的活动中注销android中的用户

如何在进入不同活动的情况下不删除 Android Studio 活动中的变量?

Android Webview问题:如何在单个活动中打开具有不同按钮的不同页面

如何在一个 android studio 项目中为两种不同类型的用户提供两种不同的导航抽屉活动?

如何根据 android studio 中的 listview 项目点击更改活动图像和文本? java 或 kotlin